在List<>中查找元素包含一个值

时间:2013-04-23 19:04:32

标签: c# .net linq list

我有List<MyClass> MyList其中

public class MyClass
{
    public string name { get; set; }
    public string value { get; set; }
}

鉴于名称,我想得到相应的值。我现在将它实现为:

MyList[MyList.FindIndex(item => String.Compare(item.name, "foo", 0) == 0)].value

有更简洁的方法吗?

6 个答案:

答案 0 :(得分:74)

使用LINQ:

var value = MyList.First(item => item.name == "foo").value;

(当然,这只会找到第一场比赛。围绕这个有很多选择。)

或使用Find代替FindIndex

var value = MyList.Find(item => item.name == "foo").value;

我强烈建议使用LINQ - 这是近来惯用的方法。

(我还建议遵循.NET命名约定。)

答案 1 :(得分:13)

您可以使用Where过滤和Select来获得所需的值。

MyList.Where(i=>i.name == yourName).Select(j=>j.value);

答案 2 :(得分:4)

使用功能查找是更清洁的方式。

MyClass item = MyList.Find(item => item.name == "foo");
if (item != null) // check item isn't null
{
 ....
}

答案 3 :(得分:4)

我会使用.Equals()进行比较而不是==

像这样:

MyClass item = MyList.Find(item => item.name.Equals("foo"));

特别是因为它为您提供了像StringComparison这样的选项,这非常棒。例如:

MyClass item = MyList.Find(item => item.name.Equals("foo", StringComparison.InvariantCultureIgnoreCase);

这使您的代码可以忽略特殊字符,大写和小写。还有更多选择。

答案 4 :(得分:3)

Enumerable.First返回元素而不是索引。在这两种情况下,如果列表中没有匹配的元素,您将收到异常(当您尝试在索引-1处获取项目时,原始代码将抛出IndexOutOfBoundsException,但First将抛出{ {1}})。

InvalidOperationException

答案 5 :(得分:-2)

他的身体很晚了,但我正在写

if(mylist.contains(value)){}