在C#中编写if语句是否有更简洁的方法?

时间:2011-01-27 13:43:36

标签: c#

也许有,我不知道,如果是这样,我很乐意开悟。我希望能够使用类似于?:运算符的东西,但不必包含:而不必将结果赋给变量,如下所示:

q?r();

在语义上与

相同
if (q)
{
    r();
}

编辑:我应该表达自己更清楚。我正在寻找一种摆脱if和s的方法,并用更具功能性的风格表达条件语句。

干杯, /基督教

5 个答案:

答案 0 :(得分:5)

if (q) r();

这就像你能得到它一样简洁。

答案 1 :(得分:3)

有时您可以使用LINQ保存编写if语句。

例如,而不是:

int CountItemsLargerThanFive(IEnumerable<int> collection)
{
   int count = 0;
   foreach (var item in collection)
   {
      if (item > 5)
      {
         count++;
      }
   }
   return count;
}

你可以写:

int CountItemsLargerThanFive(IEnumerable<int> collection)
{
   return collection.Count(item => item > 5);
}

没有if的!

还有许多其他情况,其中if等控制结构可以被LINQ替换。

答案 2 :(得分:1)

如果要执行单个语句,可以省略括号并将其写在一行:

if (q) r();

通常情况下,将条件和代码放在单独的行上会更具可读性,并且始终包含括号,但如果条件和代码都很简单,那么可读性应该不是问题。

示例:

if (line > 0) builder.AppendLine();

作为替代:

if (line > 0) {
  builder.AppendLine();
}

答案 3 :(得分:1)

正如其他人所说,坚持明显的路线。

为了好玩,这里有一种方法可以像代表一样使用条件运算符(请不要这样做):

(q ? (Action)r : () => { })();

如果有真正的else

,看起来会更好一些
(q ? (Action)trueAction : falseAction)();

答案 4 :(得分:-2)

你也可以使用:x ?? 0 这是空检查