转换VB到c#帮助(?操作符)



我希望能得到一些帮助,将下面的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++)
导致

操作符<=不能应用于int和bool

类型的操作数。这就是为什么我试图改变信仰。然而,该转换导致不能隐式地将int转换为bool,或者反过来。

解决方案:

翻转?我似乎已经解决了这个问题。因此,除了一个小细节之外,转换似乎是正确的。

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

谢谢!

你应该使用

(Flip ? 1 : 3)

。VB的If运算符和c#中的?:运算符都要求第一个操作数为布尔值。因此,在您的情况下,Flip已经必须是一个布尔值,您不必将其转换为整数,就可以在条件运算符中使用它。

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

重申一下,c#中相当于VB For ... Next的代码看起来像这样(非常迂腐):

{
    // 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++)
    {
        // ...
    } 
} 

这应该工作(至少它是为我工作):

for (int Y = 0; Y <= Flip ? 1 : 3; Y++) {
   // ....
}
Dim Y As Integer = 0
While If((Y <= Convert.ToInt32(Flip)), 1, 3)
  '.. Your Code
  Y += 1
End While

最新更新