?:VB到C#的运算符

时间:2014-11-14 19:42:52

标签: c# vb.net operators

我使用在线转换器将一段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代码中所做的事情,或者我的解决方案是否改变了那段代码的目的。如果我所做的是正确的,或者我需要做什么,我将非常感谢您的帮助。

2 个答案:

答案 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))

现在,条件操作的值为10,就像在原始VB代码中一样。

有趣的是,转换器错过了那些括号,因为它非常宽松,否则添加括号。不需要该行中的大多数括号:

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

当然根本不需要条件操作,您只需检查if语句中的条件:

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

与:

相同
if (str7 != str10 || str7 == "")