转换VB到c#帮助(?操作符)
本文关键字:操作符 帮助 VB 转换 | 更新日期: 2023-09-27 18:14:47
我希望能得到一些帮助,将下面的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