4

我正在尝试在 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 部分,但 arr.SelectedValue(0).Value 已传递到 IIF,因此仍在引用 false 部分。

有没有像“andalso”这样适合我的情况的逻辑?以免跑错部分。

非常感谢!

4

2 回答 2

9

您需要使用IF 运算符而不是 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) 
于 2012-07-18T10:04:42.810 回答
0
于 2012-07-18T10:06:44.913 回答