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

Posted

技术标签:

【中文标题】C#二维数组验证表单中的条目【英文标题】:C# two-dimensional array to validate entry in the form 【发布时间】:2019-02-15 04:43:30 【问题描述】:

每个用户都需要填写一个表格,它有 4 个字段:日期、账单代码、金额和货币。账单代码有一个下拉菜单,其中包含许多有效的 4 个选项(健康、旅行、膳食、酒店)。账单代码字段不能为空,只能选择这4个选项之一。用户使用 4 个帐单代码中的每一个输入 4 个条目。如果用户仅输入 Health and Travel,则会触发一条错误消息,指出需要添加 Meal 和 Hotel 记录。这是我到目前为止得到的:

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;
            
        
    
   

但它不能确保所有这四个都输入了,而且我不确定如何制作一条错误消息来告诉用户缺少四个中的哪一个。我将不胜感激这方面的任何帮助。

【问题讨论】:

仅供参考,这称为锯齿状数组。对于您的用例,您似乎想将其用作实际的二维数组。我建议你简单地使用二维数组并简单地检查长度是否为 4 为了创建一个错误消息来指出缺少哪些值,您必须为每个值编写单独的检查。 为什么要使用二维数组?每个维度具体指的是什么? bills 到底是什么? @MostafaF。这里有两个数组,一个代表金额(应该等于或大于零),如果在金额中输入任何内容,则必须是账单代码。 @Mainta 我强烈建议您编写一个示例有效输入和一个示例无效输入以确保其清晰 【参考方案1】:

我相信您不需要任何二维或锯齿状数组。您需要定义一个结构,如:

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 而不是structBillCode 使用enumDate 使用DateTime,@ 金额请拨打 987654328@。

【讨论】:

谢谢,但这给了我 4 条错误消息:“bool”不包含“BillCode”的定义,并且找不到接受“bool”类型的第一个参数的扩展方法“BillCode” (您是否缺少 using 指令或程序集引用?)。 @Mostafa F. 您是否使用了我的解决方案的确切代码?也许您错误地输入了ValidateBillCode(bool[] billArray) 而不是ValidateBillCode(Bill[] billArray) 这是我现在得到的:'Bill':不能在结构中初始化实例属性或字段。 @Mostafa F. 另外:“Bill”不包含“BillCode”的定义,并且找不到接受“Bill”类型的第一个参数的扩展方法“BillCode”(您是否缺少 using 指令或程序集参考?) 您可能走错了路。为确保它正常工作,请创建一个新的控制台项目。然后尝试将我提供的两段代码复制到 Program 类中,就在 Main 方法结束 之后。然后你会看到没有编译错误。并且您也可以通过Main 方法通过提供Bills 的列表进行测试。

以上是关于C#二维数组验证表单中的条目的主要内容,如果未能解决你的问题,请参考以下文章

二维数组未在表单中绘制

C# 中锯齿状数组的内存分配与 C++ 中的二维数组内存分配

如何将 C# 中的二维数组传递给 C++ DLL?

为啥在 C# 中的二维数组中按列写入速度很慢

将二维数组信息传递给 c# 中的方法

如何从 C# 中的二维对象数组中取回大小?