C# 在列表初始化中有条件地添加项

C# 在列表初始化中有条件地添加项,c#,list,C#,List,我想在列表初始化中添加一些项目,但有时我不想根据条件添加项目,我在下面尝试使用三元运算符,但它会在列表中添加null。如果满足条件,是否有一种方法可以完全跳过添加特定项目?我不需要在单独的if块中使用初始化就可以做到这一点,但我正在寻找一种可以在相同的初始化语句中完成的解决方案。为了更清楚地说明我的问题,我的列表应该基于标志具有不同的项目顺序 var myListByOrder= new List<Object>(); if(flag) { MyListByOrder.A

我想在列表初始化中添加一些项目,但有时我不想根据条件添加项目,我在下面尝试使用三元运算符,但它会在列表中添加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

            });
 }
var myListByOrder=new List();
国际单项体育联合会(旗)
{
MyListByOrder.AddRange(新[]
{
项目1,
项目2,
条件?第3项:空,
项目4,
项目5
});
}
其他的
{
MyListByOrder.AddRange(新[]
{
项目5,
项目3,
条件?第7项:空
项目1,
项目2
});
}

现在仅仅因为一个条件,我不想破坏代码的可读性并提供额外的if-else,是否有一个解决方案,它可以保持不变,并在满足条件时跳过元素。另一种方法是,在用上述方法填充完空值后,我可以从数组中删除空值。

不,数组初始值设定项必须具有编译时已知的固定长度


但我相信你知道,有很多选择。如果仍要将项添加到列表中,则最好将它们添加到单独的语句中。

否,数组初始值设定项必须具有编译时已知的固定长度


但我相信你知道,有很多选择。如果你把项目添加到一个列表中,你也可以把它们添加到单独的语句中。

如果你的代码中出现了这种模式,你可以考虑创建一些扩展方法,这些方法可以用来建立一个方法链来将项追加到<代码>列表中。

大概是这样的:

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

如果在您的代码中出现这种模式,您可以考虑创建一些可用于构建方法链的扩展方法,用于将项追加到<代码>列表< /> >

大概是这样的:

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

您不是在初始化列表,而是在将数组的项添加到已存在的列表中。集合初始化语法类似于数组的语法,例如
var MyList=new List{item1,item2}
。这些物品来自哪里?修改代码会更容易,而且不会产生任何不需要的东西。@PanagiotisKanavos Thankso这些东西是从哪里来的?这个问题不完整。如果它们是由迭代器生成的,您可以跳过不需要的项。如果它们是通过查询生成的,则可以使用
Where
。你甚至可以使用一个简单的
条件?新[]{i1,i2,i3}:新[]{i1,i2}
。还是
条件?新列表{i1,i2,i3}:新列表{i1,i2}
您不是在初始化列表,而是在将数组的项添加到已存在的列表中。集合初始化语法类似于数组的语法,例如
var MyList=new List{item1,item2}
。这些物品来自哪里?修改代码会更容易,而且不会产生任何不需要的东西。@PanagiotisKanavos Thankso这些东西是从哪里来的?这个问题不完整。如果它们是由迭代器生成的,您可以跳过不需要的项。如果它们是通过查询生成的,则可以使用
Where
。你甚至可以使用一个简单的
条件?新[]{i1,i2,i3}:新[]{i1,i2}
。还是
条件?新列表{i1,i2,i3}:新列表{i1,i2}