将VB转换为C#help(?运算符)

时间:2015-09-28 13:33:55

标签: c# vb.net

我很感激将以下VB代码转换为C#的一些帮助。代码转换器到目前为止工作正常,但是这部分我碰到了一个砖墙,我不知道如何解决它。

For Y As Integer = 0 To If(Flip, 1, 3)
...
Next

我认为这首先会起作用:

for (int Y = 0; (Y <= Convert.ToInt32(Flip)) ? 1 : 3; Y++)
   {
   ...
   }

但唉,事实并非如此。也许我只是不知所措,但我不确定如何继续这里。

感谢您的任何建议!

修改

Flip是一个布尔值。转换器建议

for (int Y = 0; Y <= Flip ? 1 : 3; Y++)

导致运算符&lt; =无法应用于int和bool 类型的操作数。因此我试图转换的原因。然而,转换导致无法隐式地将int转换为bool 或反过来。

SOLUTION:

Flip周围的支架? 1:3似乎解决了这个问题。所以转换似乎是正确的,除了一个小细节。

for (int Y = 0; Y <= (Flip ? 1 : 3); Y++)

全部谢谢!

4 个答案:

答案 0 :(得分:8)

你应该使用

(Flip ? 1 : 3)

代替。 VB中的If operator和C#中的?: operator都要求第一个操作数是布尔值。所以在你的情况下Flip已经必须是一个布尔值,你根本不需要转换为整数来在条件运算符中使用它。

答案 1 :(得分:3)

请注意,在VB中,For ... Next的边界在循环开始之前计算一次。如果Flip在循环期间有可能发生变化,那么这可能解释了差异。

要重新迭代,VB For ... Next的C#等价物看起来像这个(非常迂腐)代码:

{
    // y1 is the hidden variable/register that retains the ending bound of the range
    int y1 = Flip ? 1 : 3; // Or whatever - what is Flip again? Here as Boolean
    // int y1 = (Flip != 0) ? 1 : 3; // Flip as Integer
    for(int Y=0; Y<=y1; Y++)
    {
        // ...
    } 
} 

答案 2 :(得分:0)

这应该有效(至少它对我有用):

for (int Y = 0; Y <= Flip ? 1 : 3; Y++) {
   // ....
}

答案 3 :(得分:0)

Dim Y As Integer = 0
While If((Y <= Convert.ToInt32(Flip)), 1, 3)
  '.. Your Code
  Y += 1
End While