【问题标题】:Avoid if else when checking null检查 null 时避免使用 if else
【发布时间】:2014-04-07 12:28:06
【问题描述】:

在 VB.NET 中,我有一个这样的 if else 块

If a is null
    Callb()
Else
    Callc()

这两种方法都不会返回任何 void 我想在这里删除 if else 块

有没有一种简单的方法可以为此编写一个单行代码

【问题讨论】:

  • 为什么要删除 if/else?
  • 我想避免 if else 条件,因为我有两个像这样的代码清理器我想避免的验证
  • 这看起来不像 C#
  • 在不了解代码的情况下我们无法具体说明,但总的来说这种结构是清晰且可以接受的。如果您想删除此结构的大量重复项,则将其重构为单个组件将是您实现此目的的方式。但这种重构取决于您的设计的更多信息,而不是您在此处提供的信息。
  • @webdunia:不要“避免”条件块。它们是语言的基本组成部分,用于表达条件行为。清晰而富有表现力地编写代码,而不是仅仅为了尽量减少击键而试图变得非常聪明。您会发现后者更难以支持

标签: vb.net


【解决方案1】:

只需使用执行此操作的特定操作:

 public void CallFunction(object a)
 {
   if (a == null)
       Callb()
    else
       Callc()
 }

然后你可以在你的验证例程中调用它:

 CallFunction(s);

另外,请查看here,这正是您在此处提出的问题以及在哪里提供了一些答案。但对我来说,它们似乎都太过分了,而且很麻烦。 if/else 没有错,保持简单。

编辑:我看到您将标记从 C# 更改为 VB.NET,但我确信您可以转换上面的 C# 代码:)

【讨论】:

    【解决方案2】:

    L-Three 的答案很好,最初发布的代码也很好。如果您真的想用它变得可爱并使其成为单线,您可以这样做:

    首先,让CallACallB 返回一些东西。从字面上看任何东西(您不必实际使用它返回的内容)。

    然后,你可以这样调用:

    Dim foo As Object = If(someCondition, CallA(), CallB())
    

    同样,您实际上不必对这个变量做任何事情。

    我同意其他帖子的观点,即当您保留 If/Else 块时,意图会更加清晰。我发布的代码更短,但是当你写了足够多这样的东西后,你的同事会讨厌你。我不建议养成它的习惯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多