【问题标题】:Do nothing keyword in C#? [closed]在 C# 中什么都不做关键字? [关闭]
【发布时间】:2012-10-18 14:31:58
【问题描述】:

在 C# 中是否有“什么都不做”的关键字?

例如,我想使用三元运算符,其中一个操作是不采取任何操作:

officeDict.ContainsKey("0") ? DO NOTHING : officeDict.Add("0","")

【问题讨论】:

  • if 有什么问题?
  • 在您的示例中,您应该使用“if”语句而不是三元运算符。
  • 三元运算应该有结果。
  • 我不禁觉得我在这个问题上受到了拖累。 =p
  • 这个问题被关闭为“不是一个真正的问题”。这可能不是一个好问题,但它似乎是一个真正的问题,因为它再次被问到:stackoverflow.com/questions/41146905/…

标签: c#


【解决方案1】:

不,没有这样的关键字。此外,?: 运算符不用于决定动作。它用于决定(或者,更专业地说,值表达式)。

您真的非常想使用 if 条件来进行此类决策:

if (!officeDict.ContainsKey("0"))
    officeDict.Add("0", "");

【讨论】:

    【解决方案2】:

    正如其他人所指出的,在这里使用 if 语句更为惯用。

    但要回答您的问题,您可以使用 lambda 和委托:

    // Bad code, do not use:
    (officeDict.ContainsKey("0") ? (Action)(() => { }) : () => officeDict.Add("0", ""))();
    

    【讨论】:

    • 实际提供有效解决方案的功劳。就算是脑残……
    【解决方案3】:

    撇开这是一个坏主意这一事实不谈,您实际上可以使用属性创建一个“DoNothing”方法,以有条件地发出方法调用(请注意,这依赖于您不#define a 'NEVER')的约定条件。)由于 ConditionalAttribute,不会发出对该方法的调用,并且您基本上有一个“nop”代码部分。

           [Conditional("NEVER")] 
           public void DoNothing() 
           { 
           } 
    

    不过,正如其他几个人已经指出的那样,不建议这样做。

    【讨论】:

      【解决方案4】:

      如果您只想在其中一种情况下做某事,为什么要使用三元运算符? 为什么不直接反转条件并使用 if 语句?

      if (!officeDict.ContainsKey("0"))
      {
          officeDict.Add("0","")
      }
      

      【讨论】:

      • 好建议:不要在问号前写空格,看起来不专业。
      【解决方案5】:

      三元运算符用于表达式,而不是语句。

      你想要一个if 声明。

      【讨论】:

        【解决方案6】:

        为什么不直接使用 if 语句让代码看起来像这样:

        if(!officeDict.ContainsKey("0"))
            officeDict.Add("0","")
        

        【讨论】:

          【解决方案7】:

          为什么不写一个简单的if呢?

          if (!officeDict.ContainsKey("0"))
              officeDict.Add("0","")
          

          它将更具可读性。

          【讨论】:

            【解决方案8】:

            为什么不为此使用 IF 语句?

            if(!officeDict.ContainsKey("0")) officeDict.Add("0","");
            

            【讨论】:

              【解决方案9】:

              改为使用 if 语句。

              if (!officeDict.ContainsKey("0")) 
              {
                  officeDict.Add("0","")
              }
              

              【讨论】:

                【解决方案10】:

                试试这个(笑)

                    if (officeDict.ContainsKey("0")) 
                       Thread.Sleep(1) 
                   else
                       officeDict.Add("0","")
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-04-17
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-12
                  • 2015-08-01
                  相关资源
                  最近更新 更多