【问题标题】:How would I shorten this If... Else... statement to check the state of a Date?我将如何缩短此 If... Else... 语句以检查日期的状态?
【发布时间】:2010-04-02 22:36:28
【问题描述】:

我是一名 C# 程序员,但涉足 VB.Net,因为我团队中的其他人都在使用它。为了专业发展,我想缩小以下 If... Else... 声明。

If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then
    item.WhenUpdated = Nothing
Else
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value
End If

我很感激已经有示例可用,但是我无法让它适用于这种特定情况。

干杯,伊恩。

【问题讨论】:

  • 虽然不是很明显,但这几乎是stackoverflow.com/questions/576431/…的复制品
  • 这不是错误的方式吗?
  • 谢谢我看到了这个问题,但不明白如何在这种情况下应用它。我看到你已经投票关闭。很好,我有我需要的答案。
  • @Mark 这是我工作很晚了,我很抱歉,我会把它转过来。
  • @Ian:对此我很抱歉。您问题的“我是 C# 程序员”前言让我得出结论,您可能知道 ?: 语法并想要类似的东西。

标签: c# vb.net code-conversion


【解决方案1】:

将 If 用作函数而不是语句:

item.WhenUpdated = If(cmd.Parameters("@whenUpdated").Equals(DBNull.Value), cmd.Parameters("@whenUpdated").Value, Nothing)

【讨论】:

  • 你还是得把这个放两次cmd.Parameters("@whenUpdated").Value。为什么不写一个 DBNull2Nothing 函数呢?让它更短和自我记录?
【解决方案2】:

类似于 C# 中的三元运算符,VB 有IIF function

item.WhenUpdated = IIF(cmd.Parameters("@whenUpdated").Equals(DBNull.Value),
                            cmd.Parameters("@whenUpdated").Value, 
                            Nothing)

如果第一个参数(布尔表达式)的计算结果为真,则从函数返回第二个参数。如果第一个参数为假,则返回第三个参数。

【讨论】:

  • IIf 函数不会短路并返回必须强制转换的 Object 类型。只要您使用的是VB2008,最好使用新的If三元运算符。
  • 很高兴知道。几年前我放弃了 VB,从那以后就没有做太多了。
  • 有些人运气不错!
【解决方案3】:
item.WhenUpdated = Nothing
If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value
End If

只有 1 行,但仍然更短。

IF 函数绝对是最短的,但不是最易读的。

【讨论】:

  • 您也可以将 =Nothing 放在声明中,因此将 WhenUpdated 调暗为 Date = Nothing。那将节省另一行:-)
  • 我不能这样做 @CResults 因为它是一个数据对象。 ;-)
【解决方案4】:

少一行

item.WhenUpdated = Nothing
If cmd.Parameters("@whenUpdated").Equals(DBNull.Value) Then
    item.WhenUpdated = cmd.Parameters("@whenUpdated").Value
End If

【讨论】:

    【解决方案5】:

    如果您想要短路行为,请使用运算符 If(...)。

    如果您不想发生短路行为,请使用函数 IIf(...)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 2017-10-16
      相关资源
      最近更新 更多