在这种情况下,更好的替代许多嵌套的if语句?

时间:2012-03-15 10:13:49

标签: c# if-statement nested-if

if (task1 != null)
    //Do something with task1
else
{
     if (task2 != null)
         //Do something with task2
     else
     {
         if (task3 != null)
             //Do something with task3
         else
         {
             if (task4 != null)
                 //Do something with task4
         }
     }
}

是否有上述代码的替代品?我正在寻找一种“奉承”的方式来处理任务上的开关外壳,而不是空的。

提前感谢任何有帮助的人。

4 个答案:

答案 0 :(得分:12)

它们都是同一类型吗?你想在每个分支做同样的事吗?如果是这样,您可以使用null-coalescing:

var chosenTask = task1 ?? task2 ?? task3 ?? task4;
// do something with chosenTask

答案 1 :(得分:3)

使所有任务使用Run()方法实现ITask,并将要运行的任务添加到ICollection中,以便迭代它们。

foreach (var task in TaskCollection) {
   task.Run();
}

答案 2 :(得分:2)

这取决于你的方法做了什么。如果没有,您可以使用:

if (task1 != null)
{
    // Do something with task1
    return;
}
if (task2 != null)
{
    // Do something with task2
    return;
}
if (task3 != null)
{
    // Do something with task3
    return;
}
if (task4 != null)
{
    // Do something with task4
    return;
}

(我正要添加Marc正在制作的相同点 - 如果你要用同样的东西与任何首先非空的任务,那么null-coalescing operator确实是你的朋友。)

答案 3 :(得分:1)

您可以使用条件运算符,条件是左侧需要一些变量

var v = task1 != null ? do something : task2 == null ? do something : task3 != null ? do something : task4 != null ? do something : null;