List <string>获取以Name = using LINQ </string>开头的项目

时间:2013-10-02 20:30:06

标签: c# linq

如何从List<string>检索以Name=

开头的项目(值)

如果列表包含值:

Name=Jhon Smith
Age=20
Location=CityName

我想获得值Jhon Smith

我确实知道如何使用foreach传统地遍历列表,并且如果值以Name=开头,则会有条件......但是我对LINQ不太好。

3 个答案:

答案 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)

像这样使用SingleSingleOrDefault

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);

或类似于FirstFirstOrDefault,具体取决于您的确切需要。

用户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);