【问题标题】:VB to C# conversion error (assign and if statements)VB 到 C# 的转换错误(assign 和 if 语句)
【发布时间】:2020-12-22 16:38:50
【问题描述】:

什么是正确的转换方式

if((year mod 4=0 and year mod 100<>0) or (year mod 400=0), “Leap Year”, “Not a Leap Year”)

转 C#

我能够成功转换第一部分 if ((year % 4 == 0 &amp; year % 100 != 0) | (year % 400 == 0)),但是当我添加消息时,我得到一个错误。

任何帮助将不胜感激。

【问题讨论】:

  • @MindSwipe,这实际上不是真的。在 VB 中,您有短路布尔运算符AndAlsoOrElse,非短路布尔运算符AndOr 以及按位运算符AndOr。所有这些都有 C# 等价物,就像在 VB 中一样,非短路布尔运算符和位运算符是相同的。也就是说,在 C# 中,有短路布尔运算符&amp;&amp;||,非短路布尔运算符&amp;| 以及按位运算符&amp; 和@987654334 @.
  • @MindSwipe,您可能从未在 C# 中遇到过非短路布尔运算符,因为几乎没有人使用它们,几乎没有人应该使用它们。在 VB 中也是如此,但由于 VB6 及之前的所有历史,没有短路运算符,很多人使用了错误的运算符。
  • 哇,刚刚了解了非短路运算符!
  • @jmcilhinney 很有趣,我不知道。我的 VB 知识开始和结束于玩 MS Office 宏的 45 分钟。然而,我接触到了 C# 中的短路与非短路运算符,它们只是从我的脑海中溜走了(就像你说的,并且有充分的理由)几乎没有人使用它们
  • 乐观代码,顺便说一句。下一次它实际上比简单的 mod 4 更有用的是 2100。我们中很少有人会在那时还活着。我想知道代码是否仍在运行。

标签: c# vb.net rpa uipath


【解决方案1】:

VB If 运算符的等效项是 C# ternary operator (?:),即

If(x, y, z)

相当于:

x ? y : z;

为了记录,还有一个像这样的If 运算符:

If(x, y)

如果x 不是null,则计算为x,否则计算为y。 C# 等效项称为null coalescing operator (??):

x ?? y;

【讨论】:

    【解决方案2】:

    原来的 VB 代码应该使用DateTime.IsLeapYear(Int32) Method,所以在 C# 中它会变成:

    DateTime.IsLeapYear(year) ? "Leap Year" : "Not a Leap Year";
    

    【讨论】:

      【解决方案3】:

      可编译代码中的答案是:

      private string LeapYearResponse(int year)
      {
          if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
              return "Leap Year";
          else
              return "Not a Leap Year";
      }
      

      或者更简洁:

      private string LeapYearResponse(int year)
      {
         return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) ? "Leap Year" : "Not a Leap Year";
      }
      

      【讨论】:

        猜你喜欢
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        • 1970-01-01
        • 2019-07-04
        • 1970-01-01
        相关资源
        最近更新 更多