在List 中查找包含值的元素

我有一个List 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 

有更清洁的方法吗?

使用LINQ:

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

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

或使用Find而不是FindIndex

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

我强烈建议使用LINQ – 这是现在更惯用的方法。

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

您可以使用“过滤位置”和“ Select来获取所需的值。

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

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

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

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

像这样:

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

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

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

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

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

 MyList.First(item => string.Equals("foo", item.name)).value