VB.Net到C#转换'+'运算符

时间:2013-04-29 23:27:38

标签: c# vb.net

为什么VB.Net会转换此代码

Sub Main()
    Dim str As String = ""
    Dim lNumber As Integer = 0
    str = "String " + lNumber
    Console.WriteLine(str)
End Sub

public static void Main()
{
    int lNumber = 0;
    Console.WriteLine(Conversions.ToString((double) (Conversions.ToDouble("String ") + lNumber)));
}

而不仅仅是

public static void Main()
{
    int lNumber = 0;
    Console.WriteLine("String " + lNumber);
}

我在C#中问这个问题

  

当一个或两个操作数都是string类型时,+连接操作数的字符串表示

2 个答案:

答案 0 :(得分:6)

VB.NET + *
VB.NET将运算符+视为算术运算符,尝试将一个数字添加到另一个数字。如果一个操作数是一个数字,它会将另一个操作数转换为数字(但仅当Option ExplicitOn时)。只有当两个操作数都是字符串时,这些字符串才会被连接。

请参阅:http://msdn.microsoft.com/en-US/library/9c5t70w2%28v=vs.80%29.aspx

VB.NET& *
VB.NET将运算符&视为用于连接字符串的运算符。如果一个操作数是一个字符串,它会将另一个操作数转换为字符串。

请参阅:http://msdn.microsoft.com/en-US/library/wfx50zyk(v=vs.80).aspx

C#.NET + *
C#.NET将运算符+视为连接运算符的算术运算符,具体取决于数据类型。如果一个操作数是一个字符串,它会将另一个操作数转换为字符串。

请参阅:http://msdn.microsoft.com/en-us/library/k1a63xkz(v=vs.71).aspx

因此,了解这一点,将VB.NET运算符+转换为将操作数转换为数字的方法是合乎逻辑的。

要查看该语言之间的所有差异,请参阅:http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

答案 1 :(得分:1)

我找到了问题here (+ Operator (Visual Basic) )

的答案

表达式的数据类型:当一个表达式是数字数据类型而另一个是字符串时会发生什么?

编译器的操作:如果Option Strict为On,则生成编译器错误。 如果Option Strict为Off,则隐式将String转换为Double并添加。 如果String无法转换为Double,则抛出InvalidCastException异常。