【发布时间】:2016-07-05 18:56:18
【问题描述】:
此程序用于验证 Excel 行数据。 如果 if 语句为假,我需要在字符串中附加一条消息,等等 N 个 if 语句。这不起作用,因为您可以看到第一个 if 语句是否失败,我不会继续执行其他 if 语句。稍后,我需要处理 100 多列,所以我正在寻找一种方法来做到这一点。
有没有其他方法可以重写它,使其更具可读性和更少重复?我知道我可以做一个巨大的 if (.. && ....) 来验证所有单元格和单个 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语句,按顺序执行。 -
@nicholas 我看了那个问题。但是,我不打算从任何 if 语句中返回。仅打算在通过所有检查后返回。最重要的部分是获取消息
-
但是您发布的代码示例在第一次检查失败后会短路并返回
-
我明白你在说什么。我认为那是我的错误。我要把return放在外面,我在复制粘贴我的代码时不小心把它放在里面
标签: c# if-statement