如何从List<string>
检索以Name=
如果列表包含值:
Name=Jhon Smith
Age=20
Location=CityName
我想获得值Jhon Smith
。
我确实知道如何使用foreach传统地遍历列表,并且如果值以Name=
开头,则会有条件......但是我对LINQ不太好。
答案 0 :(得分:6)
如果集合中没有这样的元素,这将抛出异常。
您可以使用FirstOrDefault
并检查是否为null或要检查的元素
是否有比赛。
list.First(x => x.StartsWith("Name=")).Substring(5)
这不会引发异常:
var prefix = "Name=";
var elem = list.FirstOrDefault(item => item.StartsWith(prefix));
if (elem != null) {
return elem.Substring(prefix.Length)
} else {
return null;
}
答案 1 :(得分:3)
像这样使用Single
或SingleOrDefault
:
var result = list.Single(s => s.StartsWith("Name=")).Substring(5);
或
string result = string.Empty;
var element = list.SingleOrDefault(s => s.StartsWith("Name="));
if (element == null)
{
//"Name=" not present, throw an exception
}
result = element.Substring(5);
或类似于First
或FirstOrDefault
,具体取决于您的确切需要。
用户canon还有另一个有趣的答案,但已删除(我不知道原因):
var result = list
.Where(x => x.StartsWith("Name="))
.Select(x => x.Substring(5))
.FirstOrDefault();
它的优点是无论输入数据如何都不会抛出。
答案 2 :(得分:1)
String match = list.FirstOrDefault( str => str.IndexOf("Name=", StringComparison.InvariantCulture) > -1 );
return match.Substring("Name=".Length);