RaG*_*aGe 23 .net c# linq list
我有一个List<MyClass> MyList地方
public class MyClass
{
public string name { get; set; }
public string value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
给定一个名字,我想获得相应的价值.我目前实现的目的是:
MyList[MyList.FindIndex(item => String.Compare(item.name, "foo", 0) == 0)].value
Run Code Online (Sandbox Code Playgroud)
有更清洁的方法吗?
Jon*_*eet 79
使用LINQ:
var value = MyList.First(item => item.name == "foo").value;
Run Code Online (Sandbox Code Playgroud)
(当然,这只会找到第一场比赛.围绕这个有很多选择.)
或者使用Find而不是FindIndex:
var value = MyList.Find(item => item.name == "foo").value;
Run Code Online (Sandbox Code Playgroud)
我强烈建议使用LINQ - 这是现在更惯用的方法.
(我还建议遵循.NET命名约定.)
Hos*_*Rad 13
您可以使用Where过滤器Select来获取所需的值.
MyList.Where(i=>i.name == yourName).Select(j=>j.value);
Run Code Online (Sandbox Code Playgroud)
使用函数 Find 是更简洁的方式。
MyClass item = MyList.Find(item => item.name == "foo");
if (item != null) // check item isn't null
{
....
}
Run Code Online (Sandbox Code Playgroud)
我将使用.Equals()而不是进行比较==。
像这样:
MyClass item = MyList.Find(item => item.name.Equals("foo"));
Run Code Online (Sandbox Code Playgroud)
特别是因为它为您提供了诸如StringComparison之类的选项,非常棒。例:
MyClass item = MyList.Find(item => item.name.Equals("foo", StringComparison.InvariantCultureIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
这使您的代码可以忽略大写和小写的特殊字符。还有更多选择。