1
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

4 回答 4

13

它们都是同一类型吗?你想在每个分支中做同样的事情吗?如果是这样,您可以使用空合并:

var chosenTask = task1 ?? task2 ?? task3 ?? task4;
// do something with chosenTask
于 2012-03-15T10:15:05.693 回答
4

这取决于您的方法是否还有其他作用。如果没有,您可以使用:

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 的任务做同样的事情,那么null-coalescing 运算符确实是你的朋友。)

于 2012-03-15T10:15:21.780 回答
3

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

foreach (var task in TaskCollection) {
   task.Run();
}
于 2012-03-15T10:17:12.713 回答
1

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

var v = task1 != null ? do something : task2 == null ? do something : task3 != null ? do something : task4 != null ? do something : null;
于 2012-03-15T10:20:45.537 回答