13

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

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

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

10 回答 10

42

不,没有这样的关键字。此外,?:操作员并不是用来决定动作的。它用于决定价值(或者,更专业地说,价值表达)。

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

if (!officeDict.ContainsKey("0"))
    officeDict.Add("0", "");
于 2012-10-18T14:32:56.410 回答
18

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

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

// Bad code, do not use:
(officeDict.ContainsKey("0") ? (Action)(() => { }) : () => officeDict.Add("0", ""))();
于 2012-10-18T14:38:25.473 回答
6

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

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

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

于 2012-10-18T14:41:24.740 回答
5

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

if (!officeDict.ContainsKey("0"))
{
    officeDict.Add("0","")
}
于 2012-10-18T14:33:17.753 回答
3

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

你想要一个if声明。

于 2012-10-18T14:32:59.643 回答
3

为什么不直接使用 if 语句,所以代码如下所示:

if(!officeDict.ContainsKey("0"))
    officeDict.Add("0","")
于 2012-10-18T14:34:02.247 回答
2

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

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

它将更具可读性。

于 2012-10-18T14:33:12.433 回答
2

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

if(!officeDict.ContainsKey("0")) officeDict.Add("0","");
于 2012-10-18T14:33:24.710 回答
2

请改用 if 语句。

if (!officeDict.ContainsKey("0")) 
{
    officeDict.Add("0","")
}
于 2012-10-18T14:33:59.383 回答
-3

试试这个(笑)

    if (officeDict.ContainsKey("0")) 
       Thread.Sleep(1) 
   else
       officeDict.Add("0","")
于 2012-10-18T14:35:15.747 回答