【问题标题】:Convert VB to C# help (? operator)将 VB 转换为 C# 帮助(? 运算符)
【发布时间】:2015-09-29 00:39:52
【问题描述】:

对于将以下 VB 代码转换为 C# 的帮助,我将不胜感激。到目前为止,代码转换器工作正常,但在这部分我有点碰壁,我不知道如何解决它。

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 隐式转换为 bool 或反之。

解决方案:

Flip 周围的括号? 1:3似乎已经解决了这个问题。因此,除了一个小细节外,转换似乎是正确的。

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

谢谢大家!

【问题讨论】:

  • 为什么不起作用? Flip 的类型是什么,你为什么要转换它 ToInt32 以及你得到什么编译器或运行时错误?

标签: c# vb.net


【解决方案1】:

你应该使用

(Flip ? 1 : 3)

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

【讨论】:

  • 如果Flip发生变化,也将?should be cached的结果转换成一个变量。
  • 转换器建议 for (int Y = 0; Y &lt;= Flip ? 1 : 3; Y++) 导致 运算符 。因此,我尝试转换。您的建议会导致同样的错误,the_lotus。
  • Flip 周围的括号? 1:3似乎已经解决了问题,如下所述。谢谢大家! for (int Y = 0; Y &lt;= (Flip ? 1 : 3); Y++)
【解决方案2】:

请注意,在 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++)
    {
        // ...
    } 
} 

【讨论】:

  • @the_lotus - 非常正确,C# 在 OP 中几乎没有出现(转换器错误?人类绝望?)。如果 Flip 是布尔值,那么真的是 (Flip ? 1 : 3) 正如其他人所说的那样。如果 Flip 是 Integer,那么它可能是 ((Flip != 0) ? 1 : 3)。
  • 感谢 rskar,我认为括号解决了问题! for (int Y = 0; Y &lt;= (Flip ? 1 : 3); Y++) 似乎是正确的。
【解决方案3】:

这应该有效(至少它对我有效):

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

【讨论】:

    【解决方案4】:
    Dim Y As Integer = 0
    While If((Y <= Convert.ToInt32(Flip)), 1, 3)
      '.. Your Code
      Y += 1
    End While
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多