假设我有一个这种形式的列表
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”,接近它的最佳方法是什么?
答案 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);
}
它实际上比我说的假设要多得多,所以如果没有检查就不安全一路上是空值。