为什么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类型时,+连接操作数的字符串表示
答案 0 :(得分:6)
VB.NET + *
VB.NET将运算符+
视为算术运算符,尝试将一个数字添加到另一个数字。如果一个操作数是一个数字,它会将另一个操作数转换为数字(但仅当Option Explicit
为On
时)。只有当两个操作数都是字符串时,这些字符串才会被连接。
请参阅: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异常。