2015-09-28 78 views
3

我很感谢将下面的VB代码转换为C#的一些帮助。代码转换器到目前为止工作得很好,但是这部分我已经碰到了砖墙,我不知道如何解决它。将VB转换为C#help(?运算符)

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

我认为这将在第一工作:

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

但可惜事实并非如此。也许我只是无所适从,但我不知道如何在这里继续。

感谢您的任何建议!

编辑:

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

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

这导致算< =不能被应用到int类型和布尔的操作数。因此,我试图转换。然而,转换结果为无法将int隐式转换为bool或其他方式。

SOLUTION:翻转过来,

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

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

谢谢大家!

+3

为什么它不工作?什么是Flip类型,为什么要将它转换为ToInt32,以及你得到什么编译器或运行时错误? – CodeCaster

回答

8

您应该使用

(Flip ? 1 : 3) 

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

+3

如果'Flip'发生变化,'''[应该被缓存](http://stackoverflow.com/a/29489981/11683)'的结果也变成一个变量。 – GSerg

+0

转换器建议'for(int Y = 0; Y <= Flip?1:3; Y ++)'导致_Operator <=不能应用于int和bool_类型的操作数。因此,我试图转换。您的建议导致相同的错误,the_lotus。 – Cornelius

+0

翻转方括号?正如下面所指出的,1:3似乎解决了这个问题。谢谢大家!对于(int Y = 0; Y <=(Flip 1:3); Y ++)' – Cornelius

0

这应该工作(至少它的工作对我来说):

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

注意,在VB中,For ... Next的界限计算一次,在循环开始之前。如果在循环过程中有任何可能改变的地方,那么这可能会解释不同之处。

再次重申,在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++) 
    { 
     // ... 
    } 
} 
+1

@the_lotus - 非常正确,疯狂的C#怎么没有出现在OP的右边任何地方(转换器错误?人类绝望?)。如果Flip是布尔值,那么它就是其他人所说的(Flip?1:3)。如果Flip是整数,那么它可能是((Flip!= 0)?1:3)。 – rskar

+0

感谢rskar,我认为括号解决了这个问题! 'for(int Y = 0; Y <=(Flip?1:3); Y ++)'似乎是正确的。 – Cornelius