在c#中迭代列表的最佳方式

本文关键字:最佳 方式 列表 迭代 | 更新日期: 2023-09-27 18:02:55

假设这里有一个列表

 x.y.z[]
 x.y.z[0].a.b = "123"
 x.y.z[1].a.b = "321"
 x.y.z[2].a.b = "567"
 x.y.z[3].a.b = "123"
 x.y.z[4].a.b = "321"
 x.y.z[5].a.b = "567"

,我只是想写一个方法,遍历每个z[]来检查它们的b元素是否包含"123",接近它的最佳方法是什么?

在c#中迭代列表的最佳方式

我假设你的声明是这样的:

private class X { public Y y;}
private class Y { public Z[] z;}
private class Z { public A a;}
private class A { public string b;}

在这种情况下,这将返回a.b值为test的所有z(例如您的"123"):

public IEnumerable<Z> Just(string test)
{
    return x.y.z.Where(z => z.a.b == test);
}

或者这将简单地说明是否有满足您的测试的元素:

public bool Any(string test)
{
    return x.y.z.Any(z => z.a.b == test);
}

或者如果有很多,数据量很大,但你只想要其中一个,那么这可能是你想要的:

public Z First(string test)
{
    return x.y.z.First(z => z.a.b == test);
}

它实际上做了比我说的更多的假设,所以如果不检查null值,使用它是不安全的。

对于你提供的有限信息,我可以给出一个最好的例子;

 if (x  != null && x.y != null && x.y.z != null)
 {
     for (int i = 0; i < x.y.z.Length; i++)
     {
         if (x.y.z[i].a != null)
         {
             if (x.y.z[i].a.b == "123")
                 return true;
         }
      }
   }
   return false; //return false by default since we'll break from the loop if  we ever find the element you're looking for