我很感激将以下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++)
全部谢谢!
答案 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