我正在尝试像这样编写函数的return语句
Return (Not IsDbNull(result)) And (CType(result, String) = "1")
Run Code Online (Sandbox Code Playgroud)
但是,如果result是DbNull,它将引发我一个InvalidCastException
(Not IsDbNull(result)) And 2/0 = 1在我的手表中写作,所以在我看来,这个CType函数有一些特殊的东西,可以在表达的其余部分之前进行评估.
我看到的东西或CType不尊重VB.NET中的评估顺序吗?有没有解决这个问题的方法,不涉及将我的表达式分成几个部分并将它们分配给变量?
您应该几乎总是使用AndAlso而不是And (而OrElse不是Or).
如果编译的代码可以根据另一个表达式的结果绕过一个表达式的评估,则称逻辑操作是短路的.如果第一个表达式求值的结果确定了操作的最终结果,则无需计算第二个表达式
And 另一方面,将评估导致此异常的两个表达式:
在
Boolean比较中,And运算符始终评估两个表达式
您也可以使用Convert.ToString该条约Nothing或DbNull空字符串:
Return Convert.ToString(result) = "1"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |