在這種情況下,文本的來源是來自winforms文本框。我主要想要了解更多關於LINQ的知識,也許可以展示它的優勢(在我看來,它比循環更容易閱讀)。這個方案有幾個要求;該函數必須從文本框中獲取文本,將其分割爲單獨的行,刪除空行和/或重複行以及修剪行。這些是使用LINQ將幾個不同動作應用於字符串列表的最簡單方法嗎?
這些是唯一的方法嗎?在C#中是否還有其他方法(除了遍歷行列表並將符合標準的項目添加到新列表,數組等等之外)?
1:
List<String> listOne = textBoxWords.Text
.Split(new char [] { '\r', '\n' })
.Select(s1 => s1.Trim())
.Where(s2 => !String.IsNullOrEmpty(s2))
.Distinct()
.ToList();
2:
List<String> listTwo = textBoxWords.Text
.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s1 => s1.Trim())
.Distinct()
.ToList();
UPDATE:此代碼建議,但如果串不需要修剪纔有效。
3:
List<String> listThree = textBoxWords.Text
.Split(new char[] { '\r', '\n' },
.Where(s1 => !String.IsNullOrWhiteSpace(s1))
.Distinct()
.ToList();
我知道這是一個)相當具體,和b)很可能使用一個DataGrid來實現更容易,但代碼我保持器使用文本框和我沒有馬上要重寫它們。
這些都看起來像完全合理的方式來做你想做的。 –
@ThomSmith我添加了最後一個來演示另一個類似但不適合的版本(用於此程序),並展示了更簡單的LINQ的功能。來自Python背景(例如列表解析),這些都是相當不錯的功能。 –
你可以使用一個Hashset來代替,它會稍微減少冗餘。 –