为什么在VB中有条件的if不需要处理条件的直接转换。例如在C#中,这很好......
bool i = false;
i = (1<2)? true:false;
int x = i? 5:6;
但如果我想在VB中使用相同的东西,我就必须将它投射
Dim i as Boolean = CBool(IIF(1<2, True, False))
Dim x as Integer = CInt(IIF(i, 5, 6))
我不明白为什么C#会进行转换以及VB为什么不进行转换。 应该我在我的C#条件上施放,例如
bool i = Convert.ToBoolean((1<2)? True: False);
int x = Convert.ToInt32(i? 5:6);
另外,是的,我知道IIF返回了类型对象,但我认为C#的功能与您返回的不仅仅是True | False相同;在我看来,C#处理隐式转换。
答案 0 :(得分:26)
IIf
是一个函数,并不等同于C#的?:
,它是一个运算符。
运算符版本已经在VB.NET中存在了一段时间,并且被称为If
:
Dim i As Boolean = If(1 < 2, True, False)
......当然,这是毫无意义的,应该写成:
Dim i As Boolean = 1 < 2
...或者Option Infer
:
Dim i = 1 < 2
答案 1 :(得分:6)
此代码将向您显示IIf
函数和If
运算符之间的区别。因为IIf
是一个函数,所以它必须评估要传递给函数的所有参数。
Sub Main
dim i as integer
i = If(True, GetValue(), ThrowException()) 'Sets i = 1. The false part is not evaluated because the condition is True
i = IIf(True, GetValue(), ThrowException()) 'Throws an exception. The true and false parts are both evaluated before the condition is checked
End Sub
Function GetValue As Integer
Return 1
End Function
Function ThrowException As Integer
Throw New Exception
Return 0
End Function