在此上下文中,许多嵌套 if 语句的更好替代

本文关键字:语句 更好 if 嵌套 上下文 许多 | 更新日期: 2023-09-27 18:27:48

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
         }
     }
}

上面代码有替代方法吗?我正在寻找一种"扁平"的方式来在任务上切换外壳,具体取决于哪个不是空的。

提前感谢任何可以提供帮助的人。

在此上下文中,许多嵌套 if 语句的更好替代

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

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

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

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 合并运算符确实是你的朋友。

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

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

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

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