如何避免在IIF中遇到错误的部分?

时间:2012-07-18 09:58:20

标签: .net vb.net iif

我正在尝试在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”这样的逻辑适用于我的情况?为了避免运行虚假部分。

非常感谢!

2 个答案:

答案 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而不是条件更合适。