C#二维数组以验证表单中的条目

时间:2018-09-10 17:49:59

标签: c# asp.net .net csharpcodeprovider protobuf-csharp-port

每个用户都需要填写一种表格,该表格有4个字段:日期,账单代码,金额和货币。帐单代码有一个下拉菜单,其中有很多选项有效,其中有4个选项有效(健康,旅行,膳食,旅馆)。帐单代码字段不能留为空白,并且只能采用这四个选项之一。用户使用4个帐单代码中的每个输入4个条目。如果用户仅输入“健康和旅行”,则会触发一条错误消息,提示需要添加餐食和酒店记录。这是我到目前为止所得到的:

public bool ValidateBillCode(bills billArray[][]) 
{
    for(int i = 0; i < billArray.Length; i++)
    {
        for(int j = 0; j < billArray[0].Length; j++)
        {
            if(billArray[i][j].IndexOf("Health") >= 0 ||
                billArray[i][j].IndexOf("Travel") >= 0 || 
                billArray[i][j].IndexOf("Meal") >= 0||
                billArray[i][j].IndexOf("Hotel") >= 0)
            {
                return true;
            } 
            else
            {
                return false;
            }
        }
    }
}   

但是它不能确保全部四个都输入,而且我不确定如何制作一条错误消息来告诉用户这四个丢失了。我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我相信您不需要任何二维或锯齿状的数组。您需要定义以下结构:

public struct Bill
{
    public string Date;
    public string BillCode;
    public string Amount;
    public string Currency;
}

然后您的ValidateBillCode()变成这样:

public bool ValidateBillCode(Bill[] billArray)
{
    bool healthEntered = false;
    bool travelEntered = false;
    bool mealEntered = false;
    bool hotelEntered = false;

    for (int i = 0; i < billArray.Length; i++)
    {
        if (billArray[i].BillCode == "Health")
            healthEntered = true;
        else if (billArray[i].BillCode == "Travel")
            travelEntered = true;
        else if (billArray[i].BillCode == "Meal")
            mealEntered = true;
        else if (billArray[i].BillCode == "Hotel")
            hotelEntered = true;
    }

    return healthEntered && travelEntered && mealEntered && hotelEntered;
}

但这只是一种非常简单的方法。对于更合适的解决方案,最好使用class代替struct,对于 BillCode 使用enum,对于使用DateTime日期double表示金额