我正在尝试在vb.net中使用IIF,这是我的代码
Dim arr as new MyClass("ABC")
MyAnotherMethod(IIf(arr.SelectedValue.Count < 1, Nothing, arr.SelectedValue(0).Value),"xxx","yyy","zzz")
上面的IIF会遇到真正的部分,但在我运行此代码后,我得到以下消息:
索引超出了数组的范围。
我认为原因是虽然应该运行true part,但是arr.SelectedValue(0).Value已经传入IIF,因此仍然会引用false部分。
有没有像“andalso”这样的逻辑适用于我的情况?为了避免运行虚假部分。
非常感谢!
答案 0 :(得分:7)
您需要使用IF Operator代替IIF功能
“使用三个参数调用的If运算符与IIf函数类似,只是它使用短路评估”
它也是类型安全的,而IIF并非如此,你应该真正使用它。看看这些有用的例子:
Dim i As Integer
'compiles if option strict is off (this is bad)
i = IIf(True, "foo", 4)
'compiles even if option strict on, but results in a runtime error (this is even worse)
i = CInt(IIf(True, "foo", 4))
'won't compile (this is good because the compiler spotted the mistake for you)
i = If(True, "foo", 4)
答案 1 :(得分:0)
IIf
已弃用,请完全使用If
:
result = If(condition, truePart, falsePart)
为了完整起见,还有第二种使用方法:
result = If(mayBeNothing, Alternative)
这两个运算符对应于C#的条件运算符… ? … : …
及其空结合运算符… ?? …
。
但@dasblinkenlight是正确的:在您的情况下,使用FirstOrDefault
而不是条件更合适。