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