簡體   English   中英

清單 <string> 使用LINQ獲取以Name =開頭的項目

[英]List<string> get item that starts with Name= using LINQ

我如何從List<string>檢索以Name=開頭的項目(值)

如果列表包含值:

Name=Jhon Smith
Age=20
Location=CityName

我想獲得Jhon Smith的價值。

我確實知道如何使用foreach遍歷整個列表,並且如果value以Name= ...開頭,則有一個條件,但是使用LINQ效果不好。

如果集合中沒有此類元素,則將引發異常。 您可以使用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;
}

像這樣使用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();

它的優點是無論輸入數據如何都不會拋出。

String match = list.FirstOrDefault( str => str.IndexOf("Name=", StringComparison.InvariantCulture) > -1 );
return match.Substring("Name=".Length);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM