如何避免一系列“if”语句?

时间:2009-09-05 04:29:20

标签: winforms controls if-statement

假设,我有一个表单......让我们说WinForm ......带有'n'个控件。

我在LOAD期间使用默认值填充它们。然后,用户可以使用所有控件进行播放,并为控件设置不同的值并提交表单。这里我发现自己编写了一系列“if”条件语句来处理每个控件的值(但不限于),避免空值,进行验证等。

虽然它有效,但还有其他更有效的方法吗?而不是不同的“ifs”?

8 个答案:

答案 0 :(得分:4)

您可能无法完全避免使用'ifs',但有时将表单上的相关控件束收集到用户控件中会有所帮助。然后,您可以将验证和所有内容从Form类移动到单独的用户控件中,从而减少混乱。

答案 1 :(得分:3)

您应该知道WinForms已经构建了验证和数据绑定的工具。与手动编码数据和验证操作相比,使用这些内置功能肯定会使代码结构更好,编写和维护更容易。 Beth Massi制作了一系列演示这些功能的视频,您可以在MSDN网站上找到它们。

答案 2 :(得分:1)

**编辑**

我没有一个全能,因为这会因形式不同而有所不同,但有一些一般的建议。

顺便说一下,我喜欢这个问题,因为它是关于保持代码清洁,可读和尽可能简单地做事。

  • 尽可能使用包含的验证控件,而不是编写if语句来验证代码。 (请参阅winforms的说明视频(基于我假设你的意思.Net winforms。)here

  • 总是看看你是否可以写一个函数来处理重复的任务。调用一个函数需要一行代码,如果你的函数只有五行,但你称之为十次,这意味着你已经为自己节省了大量重复的代码行。

  • 如果你能把这个功能写得足够聪明并能够循环控制,那就更好了。

简而言之,查看您的代码并确定尝试使用尽可能少的代码来完成工作,同时使其易于阅读和理解,并且不会采用不良做法。在业余时间尝试非生产“测试”代码,以便在学习时优化您的技术,但如果您习惯于考虑清洁代码,那么您可以更好地编写它。

答案 3 :(得分:1)

创建一组验证器,以便与控件匹配1对1。从基本Validator派生一个ControlXValidator,它以ControlX作为构造函数,并以ControlX必须评估为有效的特殊方式实现isValid(),并在验证失败时实现getDiagnosticMessage以显示相应的消息。然后在表单构造代码的末尾,创建一个Validators列表,其中包含每个控件的Validator子类。

然后你的validateForm()方法可以做类似的事情:

allvalid = True;
foreach(Validator vtor in allValidators)
{
    if (!vtor.isValid())
    {
        StatusBar.Caption = vtor.getDiagnosticMessage();
        allvalid = False;
        break;
    }
}

答案 4 :(得分:0)

如果您通过数据类型进行验证(日期应该看起来像日期),您可以使用验证数据的函数并将函数传递给用户输入和有效数据的“样本”。有效样本可以存储在数组中,由数据类型键入。

如果数据无效,则该函数返回false,并且您有一个if语句,表示“如果函数返回false,则打击用户”。

答案 5 :(得分:0)

假设语言非常强大:

创建一个散列(a.k.a Map),其中键作为控件标识,值作为函数。检索函数并调用。

答案 6 :(得分:0)

限制你的控制.....生活在文本框中你可以设置输入字符的限制......等等....

答案 7 :(得分:0)

并非特定于任何语言:使用Guard Clauses通常是摆脱ifs的好方法。这是检查空值和验证的绝佳方法。