C#:在List中查找类字段

时间:2011-11-10 16:49:10

标签: c# list generic-collections

我有以下代码:

class exampleClass
{
    int var1;
    int var2;
    string var3
}

List<exampleClass> myList = new List<exampleClass>()

myList.Add(new exampleClass { var1 = 10, var2 = 100, var3 = "a"});
myList.Add(new exampleClass { var1 = 20, var2 = 200, var3 = "b"});
etc.

如果我想在列表中找到var1 = 20的对象的索引#,我该怎么做(在这种情况下,var1 = 20在myList [1]中)?

我尝试使用Contain(),但却出现了错误。

在一个相关的主题上,假设var1的每个值都是唯一的,如果我使用一个以var1作为键的字典,它会更快。感谢。

5 个答案:

答案 0 :(得分:3)

int index = myList.FindIndex(x => x.var1 == 20);

答案 1 :(得分:2)

更快是一个非常相对的术语。它总是取决于集合中的对象数量。它可能会更容易,但更有意义。

使用您的示例:

class exampleClass
{
    int var1;
    int var2;
    string var3
}

List<exampleClass> myList = new List<exampleClass>()

myList.Add(new exampleClass { var1 = 10, var2 = 100, var3 = "a"});
myList.Add(new exampleClass { var1 = 20, var2 = 200, var3 = "b"});

var dict = myList.ToDictionary(k => k.var1);
exampleClass item1 = dict[20];

答案 2 :(得分:2)

var index = myList.FindIndex(val => val.Var1 == 20);

答案 3 :(得分:1)

这是一个full article就是这么做的。它根据您的需要提供多种解决方案。

答案 4 :(得分:1)

您可以使用Find方法检索对象(或FindAll以检索所有对象):

myList.Find(x => x.var1 == 20);

FindIndex检索List中的索引:

myList.FindIndex(x => x.var1 == 20);