2015-09-28 139 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