条件是C#和VB的差异

时间:2014-09-24 15:52:26

标签: c# vb.net

为什么在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#处理隐式转换。

2 个答案:

答案 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