在C#中迭代列表的最佳方法

时间:2014-05-12 23:52:18

标签: c#

假设我有一个这种形式的列表

 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”,接近它的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

这是我用你提供的有限信息给出的最好的例子;

 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

答案 1 :(得分:2)

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

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

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

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

它实际上比我说的假设要多得多,所以如果没有检查就不安全一路上是空值。