簡體   English   中英

C# 使用 Linq.Select() 遍歷字符串

[英]C# Iterate through string with Linq .Select()

為什么我不能像上面的示例那樣遍歷字符串並將字母(字符)添加到 HashSet。

我試圖執行這部分代碼,但 HashSet 是空的。 `

HashSet<char> chars2 = new HashSet<char>();
myString.Select(l => chars2.Add(l));

`

延期執行! 無需評價Select

如果您將ToList()添加到末尾,它將執行您的 lambda 並添加項目。

您也可以將其更改為ForEach

知道這一點,請注意,如果您不對它執行ToList()並迭代您的集合,它將一次又一次地執行它,因此如果您的 Select 運行成本很高,請確保運行一次。

我不確定“上面的示例”是什么,但您使用的 LINQ 不正確。 不應使用Select方法來產生副作用。 chars2.Add()會產生副作用。

此外,如果不需要,大多數 Linq 方法不會執行。 這稱為“延遲執行”。

相反,使用 foreach,它旨在在循環元素時產生副作用。

var myString = "abcd";
HashSet<char> chars2 = new HashSet<char>();

foreach (var chr in myString)
{
    chars2.Add(chr);
}

還有更直接的方法可以從特定的字符串創建 hash 集

myString.ToHashSet()
new HashSet<char>(myString)

Select是一個 LINQ 方法。 大多數 LINQ 方法是中間表達式,不使用集合。 您必須調用ToListForEach等終端操作才能實際“執行”查詢。

但請注意,使用 Select/ForEach 添加到集合有點奇怪:您正在使用函數式方法來執行副作用(本質上是非函數式的)。

相反,如果在您的 .NET 版本中可用,請直接使用擴展方法ToHashSet()

HashSet<char> chars2 = myString.ToHashSet();

暫無
暫無

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

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