我最近了解了IIF(A,B,C)功能.我很长一段时间VB/VB.NET Coder最近花了很多时间来加速SQL编码.
SQL中常见的一件事就是如下:
select (case where @var = 0 then MyTable.Val1 else MyTable.Val2 end) from MyTable
Run Code Online (Sandbox Code Playgroud)
IIF(A,B,C)将允许我在VB.NET中执行此操作...所有在一行.
但是,我已经读过,无论A评估的是什么,B和C都会被评估.
我可以想到一些明显的情况,这是一件坏事,例如:
Dim X as integer = IIF(SomeBoolean = true, ExpensiveFunction1(), ExpensiveFunction2())
Run Code Online (Sandbox Code Playgroud)
正如我将在我的保留曲目中包括这一点,是否有更微妙的情况我可能会使用IIF遇到麻烦?
在某些情况下,使用旧式设计是一个相当大的偏差:
Dim X as integer
if SomeBoolean = true then
X = ExpensiveFunction1()
else
X = ExpensiveFunction2()
end if
Run Code Online (Sandbox Code Playgroud)
我希望将来可以省去一些恼人的性能问题和/或错误.
在过去几年中,存在一个新的VB.NET功能,无需使用IIF()函数.
if(Something = true, ExecuteA(), ExecuteB())
Run Code Online (Sandbox Code Playgroud)
仅执行ExecuteA()或ExecuteB().最后,内联IF具有短路.
因此,如果您使用的是VB.NET的更高版本(截至2016年),请尽可能使用此版本.
vb.net ×1