简化长嵌套if语句工作流程C#

ygo*_*dev 0 c# if-statement

该程序用于验证Excel行数据.如果if语句为false,我需要将消息附加到字符串,依此类推N个if语句.这不起作用,因为你可以看到第一个if语句是否失败,我不会继续查看其他if语句.后来,我需要处理100多列,所以我正在寻找一种方法来做到这一点.

有没有其他方法可以重写这个,所以它更具可读性和重复性?我知道我可以做一个巨大的if(.... && ....)来验证所有单元格和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;
        }
Run Code Online (Sandbox Code Playgroud)

juh*_*arr 5

如果您反转if语句并返回每个语句,您可以像这样展开代码.

if (!IsInt(facilityID))
{
    isDataValid.Second = "facilityID" + errorMessage + ",";
    return isDataValid;
}
if (!IsInt(facilityDockDoorID))
{
    isDataValid.Second += "facilityDockDoorID" + errorMessage + ",";
    return isDataValid;
}
if (!IsInt(increment))
{
    isDataValid.Second += "increment" + errorMessage + ",";
    return isDataValid;
}
if (!IsInt(hoursOfOperationId))
{
    isDataValid.Second += "hoursOfOperationId" + errorMessage + ",";
    return isDataValid;
}
if (!IsInt(updatedById))
{
    isDataValid.Second += "updatedById" + errorMessage + ",";
    return isDataValid;
}
if (!IsTime(startTime))
{
    isDataValid.Second += "startTime" + errorMessage + ",";
    return isDataValid;
}
if (!IsTime(endTime))
{
    isDataValid.Second += "endTime" + errorMessage + ",";
    return isDataValid;
}
if (!IsValidDockDoorServiceType(dockDoorServiceType))
{
    isDataValid.Second += "dockDoorServiceType" + errorMessage + ",";
    return isDataValid;
}
if (IsValidDayOfTheWeek(daysOfTheWeek))
{
    isDataValid.First = true;
}
else
{
    isDataValid.Second += "daysOfTheWeek" + errorMessage + ",";
}
return isDataValid;
Run Code Online (Sandbox Code Playgroud)

然而,基于你连接Second它的事实,你更有可能想要这样的东西

if (!IsInt(facilityID))
    isDataValid.Second = "facilityID" + errorMessage + ",";
if (!IsInt(facilityDockDoorID))
    isDataValid.Second += "facilityDockDoorID" + errorMessage + ",";
if (!IsInt(increment))
    isDataValid.Second += "increment" + errorMessage + ",";
if (!IsInt(hoursOfOperationId))
    isDataValid.Second += "hoursOfOperationId" + errorMessage + ",";
if (!IsInt(updatedById))
    isDataValid.Second += "updatedById" + errorMessage + ",";
if (!IsTime(startTime))
    isDataValid.Second += "startTime" + errorMessage + ",";
if (!IsTime(endTime))
    isDataValid.Second += "endTime" + errorMessage + ",";
if (!IsValidDockDoorServiceType(dockDoorServiceType))
    isDataValid.Second += "dockDoorServiceType" + errorMessage + ",";
if (!IsValidDayOfTheWeek(daysOfTheWeek))
    isDataValid.Second += "daysOfTheWeek" + errorMessage + ",";
isDataValid.First = isDataValid.Second.Length == 0;
return isDataValid;
Run Code Online (Sandbox Code Playgroud)

请注意,我正在比较长度Second以确定是否发生任何错误.