我有一个包含很多变量的类,类似的东西
class test
{
internal int x , y ;
internal string z;
}
我创建了这个类的列表list<test> c
我想做以下事情:
- 测试所有列表项是否包含相同的 x
- 获取列表中具有 z = "try"的项目
我需要一种快捷的方法,而不是遍历整个项目
有什么建议,
最佳答案
LINQ to Objects 是您的 friend 。对于第一个:
bool allSameX = list.All(t => t.x == list[0].x);
Test firstTry = list.First(t => t.z == "try");
Test firstTryOrNull = list.FirstOrDefault(t => t.z == "try");
当然,第一个取决于 至少有一个值。备选方案可能是:
bool allSameX = !list.Select(t => t.x)
.Distinct()
.Skip(1)
.Any();
换句话说,一旦您超过了 x
的第一个不同值,就不应该再有任何值了。这样做的一个好处是,一旦它发现第二个不同的值,它就会停止查找 - 当然第一行(All
版本)也是如此。
LINQ 非常灵活,非常值得仔细研究。
编辑:如果您需要为多个不同的值进行后一个测试(“找到具有特定 z 值的元素”),您可能需要字典或查找,例如
// If there are duplicate z values
var lookup = list.ToLookup(t => t.z);
// If z values are distinct
var dictionary = list.ToDictionary(t => t.z);
如果没有 一些 的前期工作,如果不迭代列表中的至少 一些,就无法执行您想要的查询。
关于c# - 类列表问题c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837248/