在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(,,) – 两个“边”进行评估 我应该注意什么情况?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)