我使用在线转换器将一段Visual Basics代码转换为C#。 VB中的以下代码:
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代码中所做的事情,或者我的解决方案是否改变了那段代码的目的。如果我所做的是正确的,或者我需要做什么,我将非常感谢您的帮助。
答案 0 :(得分: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 == "")
。
答案 1 :(得分: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 == "")