有条件地在列表初始化中添加一个项目

TRS*_*TRS 7 c# list

我想将一些项目范围添加到我的列表初始化中,但有时我不想根据条件添加项目,我在下面尝试使用三元运算符,但它将 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,是否有解决方案,它可以保持不变并在满足条件时跳过元素。另一种方法是,我可以在按照上述方式填充数组后从数组中删除空值。

Pet*_*den 7

如果这种模式在您的代码中经常出现,您可以考虑创建几个扩展方法,这些方法可用于构建用于将项目附加到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)