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

前端之家收集整理的这篇文章主要介绍了VB.NET – IIF(,,) – 两个“边”进行评估 我应该注意什么情况?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近学到了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 integer
if 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相关文章