VB.NET – IIF(,,) – 两个“边”进行评估 我应该注意什么情况?

VB.NET – IIF(,,) – 两个“边”进行评估 我应该注意什么情况?,第1张

概述我最近学到了IIF(A,B,C)函数。我是一个很长的时间VB / VB.NET编码器谁最近花了很多时间来加快SQL编码。 在SQL中执行的一个(显而易见的)常见事情是类似于以下内容: select (case where @var = 0 then MyTable.Val1 else MyTable.Val2 end) from MyTable IIF(A,B,C)将允许我在VB.NET …这一切 我最近学到了IIF(A,B,C)函数。我是一个很长的时间VB / VB.NET编码器谁最近花了很多时间来加快sql编码。

在sql中执行的一个(显而易见的)常见事情是类似于以下内容:

select (case where @var = 0 then Mytable.Val1 else Mytable.Val2 end) from Mytable

IIF(A,B,C)将允许我在VB.NET …这一切都在一行。

然而,我已经读到,无论A评估,B和C都被评估。

我可以想到一些明显的情况,这是一件坏事,如:

Dim X as integer = IIF(SomeBoolean = true,ExpensiveFunction1(),ExpensiveFunction2())

正如我将把这包括在我的剧目,有什么更微妙的情况下,我可能会陷入麻烦使用IIF?

在一些情况下,使用老式的是一个相当大的离开:

Dim X as integerif SomeBoolean = true then  X = ExpensiveFunction1()else  X = ExpensiveFunction2()end if

我希望能够节省自己一些恼人的性能问题和/或未来的错误。

更新2016

在过去几年中,存在一个新的VB.NET功能,消除了使用IIF()函数的需要。

if(Something = true,ExecuteA(),ExecuteB())

只执行ExecuteA()或ExecuteB()。最后,内联IF与短路。

所以,如果你使用VB.NET的更高版本(截至2016年),如果你可以使用这个。

这是最常见的。
Z = iif(y=0,x/y)  'Throws a divIDe by zero exception when y is 0

不要使用它来避免除以零错误。

另一个可能的逻辑错误是当iif的一方或另一方调用修改系统状态或具有输出参数的方法时。

Z = iif(FunctionA(inputOutputParam),FunctionB(inputOutputParam))'inputOutputParam is indeterminate or at least ambiguous here.

在我的经验中,没有什么好的理由使用IIF。主要是它只是用来缩写代码,并给出了它可能导致的问题,它只是不值得。另外,我认为它使代码更难读。

bites的另一件事是,它返回一个Boxed值(即一个Object数据类型),你必须将它转换回所需的类型。

总结

以上是内存溢出为你收集整理的VB.NET – IIF(,,) – 两个“边”进行评估 我应该注意什么情况?全部内容,希望文章能够帮你解决VB.NET – IIF(,,) – 两个“边”进行评估 我应该注意什么情况?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存