我想将一些项目范围添加到我的列表初始化中,但有时我不想根据条件添加项目,我在下面尝试使用三元运算符,但它将 null 添加到我的列表中。如果满足条件,有没有办法可以完全跳过添加特定项目?我可以在不使用单独的 if 块中的初始化的情况下执行此操作,但我正在寻找可以在同一初始化语句中完成的解决方案。为了更清楚地解决我的问题,我的列表应该根据标志具有不同的项目顺序
var myListByOrder= new List<Object>();
if(flag)
{
MyListByOrder.AddRange( new []
{
item1,
item2,
condition ? item3: null,
item 4,
item 5
});
}
else
{
MyListByOrder.AddRange( new []
{
item5,
item3,
condition? item7 :null
item 1,
item 2
});
}
Run Code Online (Sandbox Code Playgroud)
现在只是因为一个条件,我不想破坏代码的可读性并提供额外的 if-else,是否有解决方案,它可以保持不变并在满足条件时跳过元素。另一种方法是,我可以在按照上述方式填充数组后从数组中删除空值。
如果这种模式在您的代码中经常出现,您可以考虑创建几个扩展方法,这些方法可用于构建用于将项目附加到List<T>.
像这样的东西:
public static class ListExtensions
{
public static List<T> Append<T>(this List<T> list, params T[] values)
{
list.AddRange(values);
return list;
}
public static List<T> AppendIf<T>(this List<T> list, bool condition, params T[] values)
{
return condition ? list.Append(values) : list;
}
}
Run Code Online (Sandbox Code Playgroud)
然后以这种方式构建列表:
myListByOrder
.Append(item1, item2)
.AppendIf(condition, item3)
.Append(item4, item5);
Run Code Online (Sandbox Code Playgroud)