用if/else条件递归处理多个列表
本文关键字:处理 列表 递归 条件 if else | 更新日期: 2023-09-27 18:15:37
我有许多包含1个或多个对象的列表,如果列表中有多个对象,它应该做一些事情。当列表中只有一个对象时,然后对第二个列表执行相同的操作。这应该发生在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
{
...
非常感谢并致以最良好的问候。Joerg
// 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);
}
}
我尝试使用与op相同的伪代码风格。逻辑复制了原始的,但以浓缩的形式,并且具有易于将列表添加到主列表数组的优势(如@Benjamin所建议的)。
假设DoSomething是应用于Count> 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
}
}
您可以先检查要使用哪个列表:
var lists = new[]{ list1, list2, list3, list4 };
var list = lists.FirstOrDefault(l => l.Count > 1);
if(list != null)
{
list.ForEach(l => DoSomething(list));
}
似乎您需要Count> 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 {
//...
}