2014-11-14 3 views
0

Я использовал онлайн-конвертер для преобразования части кода Visual Basic в C#. Следующий код в VB:?: Оператор в VB до C#

Dim aset As New DataSet 
aset = *code* 
Dim str As String = "" 
Dim str7 As String = "" 
Dim str4 As String = "" 
Dim str10 As String = "" 

If (If(((str7 = str10) AndAlso (str7 <> "")), 1, 0) = 0) Then 
    str7 = Conversions.ToString(aset.Tables.Item(0).Rows.Item(i).Item("PIN")) 
End If 
If (i <> 0) Then 
    str4 = (str4 & " ,") 
End If 
    str4 = (str4 & str) 
    str10 = str7 
    i += 1 

был преобразован в следующий код C#:

DataSet aset = new DataSet(); 
aset = *code* 
string str = ""; 
string str7 = ""; 
string str4 = ""; 
string str10 = ""; 

if ((((str7 == str10) && (str7 != "")) ? 1 : 0 == 0)) 
{ 
    str7 = Conversions.ToString(aset.Tables[0].Rows[i]["PIN"]); 
} 
if ((i != 0)) 
{ 
    str4 = (str4 + " ,"); 
} 
str4 = (str4 + str); 
str10 = str7; 
i += 1; 

Мои вопросы борьбы с оператора?:. Я пытался провести исследование, но это все еще немного запутывает меня. Я получаю сообщение об ошибке в версии C#, в которой говорится: «Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между« int »и« bool ». Поэтому, когда я изменил следующий C# кусок кода:

if ((((str7 == str10) && (str7 != "")) ? 1 : 0 == 0)) 

на следующий кусок кода:

if ((((str7 == str10) && (str7 != "")) ? 1 == 0: 0 == 0)) //I changed '1' to '1 == 0' 

ошибка, кажется, уходит. Тем не менее, я не уверен, что я правильно исправил ошибку, чтобы делать то, что программа выполняла в коде VB, или если мое решение изменило цель этой части кода. Любая помощь будет очень признательна, чтобы сообщить мне, правильно ли я сделал или что мне нужно делать.

+1

http://msdn.microsoft.com/en-us/library/ty67wk28.aspx –

ответ

15

Перевод C# неверен, а VB ужасен.

If (If(((str7 = str10) AndAlso (str7 <> "")), 1, 0) = 0) Then 

является

If If(((str7 = str10) AndAlso (str7 <> "")), 1, 0) = 0 Then 

является

If Not ((str7 = str10) AndAlso (str7 <> "")) Then 

является

If Not (str7 = str10) OrElse Not (str7 <> "") Then 

является

If str7 <> str10 OrElse str7 = "" Then 

. Соответствующим C# является тогда if (str7 != str10 || str7 == "").

+2

Могу ли я иметь брата амена – Kevin

+0

согласился, говорит этот парень здесь –

+2

Интересно, почему это было написано таким запутанным образом в первую очередь? – user2366842

2

В преобразовании отсутствует пара круглых скобок. Они необходимы вокруг условной операции, так как оператор == имеет более высокий приоритет:

if (((((str7 == str10) && (str7 != "")) ? 1 : 0) == 0)) 

Теперь значение условной операции является 1 или 0, так же как и в исходном коде VB.

Смешно, что конвертер пропустил эти круглые скобки, так как он очень либеральный с добавлением скобок в противном случае. Большинство круглых скобок в этой строке не требуется:

if ((str7 == str10 && str7 != "" ? 1 : 0) == 0) 

Условная операция, конечно, не нужно вообще, вы можете просто проверить состояние в if заявления:

if (!(str7 == str10 && str7 != "")) 

, который является такие как:

if (str7 != str10 || str7 == "") 
Смежные вопросы