Эта программа предназначена для проверки данных строки Excel. Если инструкция if является ложной, мне нужно добавить сообщение в строку и так далее для N чисел операторов if. Это не работает, потому что, как вы можете видеть, если первый оператор if не работает, я не буду переходить к другим операциям if. Также позже мне нужно будет обрабатывать более 100 столбцов, поэтому я ищу способ сделать это.Упростить процесс длинной вложенной операции if C#
Есть ли другой способ, я могу переписать это, чтобы он был более читабельным и менее повторяющимся? Я знаю, что могу просто сделать гигант, если (.... & & ....) для проверки всех ячеек и отдельных операторов if для добавления сообщений, но мне было интересно, есть ли другой способ сделать это. Я хотел бы сохранить порядок ошибок, но это не так важно. Результатом будет что-то вроде "facilityID is invalid, daysOfTheWeek is invalid"
. Я также возвращаю пользовательский тип данных Pair.
string facilityID, facilityDockDoorID, increment, hoursOfOperationId, updatedById, startTime, endTime, dockDoorServiceType, daysOfTheWeek;
facilityID = row[0];
facilityDockDoorID = row[1];
increment = row[2];
hoursOfOperationId = row[3];
updatedById = row[4];
startTime = row[5];
endTime = row[6];
dockDoorServiceType = row[7];
daysOfTheWeek = row[8];
string errorMessage = " is invalid";
if (IsInt(facilityID))
{
if (IsInt(facilityDockDoorID))
{
if (IsInt(increment))
{
if (IsInt(hoursOfOperationId))
{
if (IsInt(updatedById))
{
if (IsTime(startTime))
{
if (IsTime(endTime))
{
if (IsValidDockDoorServiceType(dockDoorServiceType))
{
if (IsValidDayOfTheWeek(daysOfTheWeek))
{
isDataValid.First = true;
}
else
{
isDataValid.Second += "daysOfTheWeek" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "dockDoorServiceType" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "endTime" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "startTime" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "updatedById" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "hoursOfOperationId" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "increment" + errorMessage + ",";
}
}
else
{
isDataValid.Second += "facilityDockDoorID" + errorMessage + ",";
}
}
else
{
isDataValid.Second = "facilityID" + errorMessage + ",";
}
return isDataValid;
}
не гнездятся в 'if' заявления, делать их последовательно. –
Возможный дубликат http://stackoverflow.com/questions/17804005/how-to-prevent-the-arrowhead-anti-pattern – nicholas
@ nicholas Я посмотрел на этот вопрос. Однако я не собираюсь возвращаться из любых утверждений if. Только намереваясь вернуться после прохождения всех проверок. Самая важная часть - получение сообщения – ygongdev