【问题标题】:How to avoid a series of "if" statements?如何避免一系列“if”语句?
【发布时间】:2009-09-05 04:29:19
【问题描述】:

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

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

虽然它有效,但是否有其他更有效的方法来代替不同的“ifs”?

【问题讨论】:

  • 我想我可以使用更多的说明。正在寻找更多的代码重用场景?例如,你有一个表单,你只想对非空的文本框做一些事情并忽略空的文本框......所以现在你正在做'if textbox1.text =“”'和'if textbox2。 txt = ""' 但是你想要的是使用一个可以在所有控件上使用的 if 语句,而不是每个控件一个 if 语句?或者你的意思完全是别的?
  • @David Yes....减少混乱。一个单一的“如果”来处理一堆文本框、日期选择器和组合框,它们有各自的逻辑......那将是必杀技!

标签: winforms controls if-statement


【解决方案1】:

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

【讨论】:

  • 要点....如果它们只是一堆文本框、日期选择器、相同形式的下拉列表呢?
  • 如果我没记错的话,因为它们只是表单,我们没有机制来限制可以从字段中输入/检索的数据集吗?就像通过更改文本字段的某些属性来限制名称字段中的数字一样?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    ** 已编辑 **

    我没有万能的,因为这会因形式而异,但有一些一般性的建议。

    顺便说一句,我喜欢这个问题,因为这一切都是为了让你的代码保持干净、可读,并尽可能简单地做事。

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

    • 始终查看是否可以编写函数来处理重复性任务。调用一个函数需要一行代码,如果你的函数只有五行,但你调用了十次,那意味着你为自己节省了很多重复的代码行。

    • 如果您可以编写足够智能的函数并能够循环通过您的控件,那就更好了。

    简而言之,请查看您的代码并决定尝试使用尽可能少的代码来完成这项工作,同时使其易于阅读和理解,并且不采用不良做法。在业余时间对非生产“测试”代码进行试验,以在您学习的过程中改进您的技术,但如果您习惯于思考干净的代码,您会更好地编写它。

    【讨论】:

      【解决方案4】:

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

      那么您的 validateForm() 方法可以执行以下操作:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          假设一种相当强大的语言:

          创建一个散列(又名 Map),其中键作为控制标识,值作为函数。检索函数并调用。

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-01-29
                • 1970-01-01
                • 2019-01-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-02-19
                相关资源
                最近更新 更多