我有很多包含一个或多个对象的列表,如果列表中有多个对象,它应该做一些事情。当列表中只有一个对象时,请取第二个列表并执行相同操作。这应该发生在4个列表中。 这是我的解决方案,但我认为这是一个糟糕的解决方案。处理此代码有更好的方法吗?
if (list1.Count > 1)
for (int i = 0; i < list1.Count; i++)
{
DoSomething(list1);
}
else
{
if (list2.Count > 1)
for (int i = 0; i < list2.Count; i++)
{
DoSomething(list2);
}
else
{
if (list3.Count > 1)
for (int i = 0; i < list3.Count; i++)
{
DoSomething(list3);
}
else
{
...
非常感谢和最诚挚的问候, 约尔格
答案 0 :(得分:6)
// using System.Collections.Generic;
// using System.Linq;
// create an enumerable "list" of your lists (however many there are):
var lists = new[] { list1, list2, list3, … };
// find the first list that has more than 1 element:
var list = lists.FirstOrDefault(_ => _.Count() > 1);
// if there is such a list…
if (list != null)
{
// … then `DoSomething` to each of its items:
foreach (var item in list)
{
DoSomething(item);
}
}
答案 1 :(得分:1)
我尝试使用与OP相同的伪代码样式。逻辑复制了原始文件,但是采用了浓缩形式,并且可以轻松地将列表添加到主列表数组中(如@Benjamin所建议的那样)。
假设DoSomething是应用于第一个列表的单个函数,其具有Count&gt; 1.如果要为每个列表应用自定义函数,可以创建另一个数组来保存函数以调用相应的列表。
listArray = new[] {list1, list2, list3, list4}; // you can add more as needed to this master array
for (int i = 0; i < listArray.Count; i++)
{
if (listArray[i].Count > 1)
{
for (int i = 0; i < listArray.Count; i++)
{
DoSomething(listArray[i]);
}
break; // http://msdn.microsoft.com/en-us/library/adbctzc4.aspx
}
}
答案 2 :(得分:0)
您可以先检查您要使用的列表:
var lists = new[]{ list1, list2, list3, list4 };
var list = lists.FirstOrDefault(l => l.Count > 1);
if(list != null)
{
list.ForEach(l => DoSomething(list));
}
答案 3 :(得分:0)
好像你需要第一个列表,其中Count&gt; 1。
此外,在for循环中,您要说DoSomething(list1);
。我认为它应该是DoSomething(list1 [i]);
var lists = new [] { list1, list2, list3, list4 };
var target = lists.FirstOrDefault(l => l.Count() > 1);
if (target != null) {
for (int i = 0; i < target.Count; i++)
{
DoSomething(target[i]);
}
} else {
//...
}