相关疑难解决方法(0)

VB.NET - IIF(,,) - 评估两个"边".我应该注意哪些情况?

我最近了解了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)

我希望将来可以省去一些恼人的性能问题和/或错误.

2016年更新

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

if(Something = true, ExecuteA(), ExecuteB())
Run Code Online (Sandbox Code Playgroud)

仅执行ExecuteA()或ExecuteB().最后,内联IF具有短路.

因此,如果您使用的是VB.NET的更高版本(截至2016年),请尽可能使用此版本.

vb.net

50
推荐指数
3
解决办法
7万
查看次数

标签 统计

vb.net ×1