【问题标题】:.Net Which is the most efficient method?.Net 哪种方法最有效?
【发布时间】:2018-01-30 09:48:14
【问题描述】:

在填充表单时,从 DB 中捕获空字段的最有效方法是什么?

方法一试试Catch

 Try
    txtKPIName.Text = ds.Tables(0).Rows(0)("Name")
 Catch ex As Exception
    txtKPIName.Text = ""
 End Try

方法二是DBNull

 txtKPIName.Text = IIf(IsDBNull(ds.Tables(0).Rows(0)("Name")), "", ds.Tables(0).Rows(0)("Name"))

你们觉得呢?

【问题讨论】:

  • 当然方法2——少即是多
  • 永远不要使用异常来驱动你的代码。
  • 捕获异常的计算量很大,所以除非真的必须这样做,否则不要这样做。
  • 第二个也是错误的。使用 If not IIF
  • 请使用NULL CHECK,try catch不是方法驱动的概念,是失败的场景。

标签: .net vb.net winforms


【解决方案1】:

DataRow(index).ToString() 将为 DbNull 值返回空字符串 - 因此您可以使用其中一种方法

txtKPIName.Text = ds.Tables(0).Rows(0).Field(Of String)("Name")

或者

txtKPIName.Text = ds.Tables(0).Rows(0)("Name").ToString()

如果您更喜欢在if .. else 中使用条件 - 然后在一行if 语句中使用DataRow.IsNull 方法和If 方法

Dim row =  ds.Tables(0).Rows(0)
txtKPIName.Text = If(row.IsNull("Name"), "default value", row.Field(Of String)("Name"))

【讨论】:

    【解决方案2】:

    看看null-Conditional Operators。它们非常优雅,可以防止 if 的级联。

    var stuff = ds?.Tables(0)?.Rows(0)?.("Name");
    

    【讨论】:

    • 这不是 OP 在他的示例中所做的。 ?. 运算符将在值为null 时返回null,但OP 需要返回空字符串/一些默认值
    • 这是一种防止异常的解决方案,方法是在 if() 内的 if() 内检查没有 if() 的空值。返回 string.Empty 而不是 null 并不是问题的有趣部分。据我所知,单行If( expression, A, B)是VB版的三元运算符。
    • "Null-Conditional operator" 是一个优雅的解决方案,但是以您的方式使用它 - 将使可能的异常远离实际原因。而不是在数据行为空的行中出现异常 - 您将在将使用 stuff 变量的其他地方出现异常。
    猜你喜欢
    • 2020-11-16
    • 1970-01-01
    • 2013-08-02
    • 2012-10-01
    • 1970-01-01
    • 2012-11-13
    • 2011-03-31
    • 2013-06-05
    • 2011-03-15
    相关资源
    最近更新 更多