2013-04-29 3 views
1

Почему VB.Net преобразует этот кодVB.Net к C# преобразования оператора '+'

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#

Когда один или оба операнда имеют тип строки, + присоединяет строковые представления операндов

+0

Как вы преобразования это? Я просто использовал этот http://www.developerfusion.com/tools/convert/vb-to-csharp/?batchId=01dcb8e4-3e6d-4d89-ae01-817dc388e243. и он генерирует тот же результат, что и вы. – Sachin

+1

Просто потому, что 'operator +' не имеет одинаковой семантики на обоих языках. – Jon

+0

@Sachin Я разбираю код с использованием рефлектора Net Gate .Net – user961954

ответ

6

VB.NET + *
VB.NET видит оператор + как arithmatic оператора, попробуйте добавить один номер на другой номер. Если один операнд является числом, он преобразует другой операнд в число (но только если Option Explicit - On). Только если оба операнда являются строками, эти строки будут объединены.

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

VB.NET & *
VB.NET видит оператор & как оператор concatinate строки. Если один операнд является строкой, он преобразует другой операнд в строку.

См: http://msdn.microsoft.com/en-US/library/wfx50zyk(v=vs.80).aspx

C# .NET + *
C# .NET видит оператор +, в зависимости от типа данных, как arithmatic оператора оператора concatination. Если один операнд является строкой, он преобразует другой операнд в строку.

См: http://msdn.microsoft.com/en-us/library/k1a63xkz(v=vs.71).aspx

Так, зная это, то логично, что VB.NET оператор + преобразуется в методы, чтобы преобразовать операнды в числа.

Чтобы увидеть все различия между языком, см: http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

+0

Да ... мой текст не был полностью заполнен. В нем говорится: если ONE opererand - это число ... Это не указывает ничего для двух строк. Я уточню свой ответ. –

1

я нашел ответ на мой вопрос here (+ Operator (Visual Basic))

типы данных выражений: Что происходит, когда одно выражение является числовой тип данных, а другой - строка?

Действие от компилятора: Если параметр Strict is On, то сгенерируйте ошибку компилятора. Если параметр Strict is Off, то неявно преобразовать String в Double и добавить. Если строка не может быть преобразована в двойную, то выведите исключение InvalidCastException.

Смежные вопросы