这些是使用LINQ将多个不同操作应用于字符串列表的最简单方法吗?

时间:2012-06-18 16:00:53

标签: c# linq

在这种情况下,文本来源来自winforms文本框。我问这个主要是为了更多地了解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();

更新:建议使用此代码,但仅在不需要修剪字符串时才有效。

3:

List<String> listThree = textBoxWords.Text
                                     .Split(new char[] { '\r', '\n' },
                                     .Where(s1 => !String.IsNullOrWhiteSpace(s1))
                                     .Distinct()
                                     .ToList();

我知道它是a)相当具体,并且b)可能使用DataGrid更容易实现,但我维护的代码使用文本框,我没有立即想要重写它们。

2 个答案:

答案 0 :(得分:2)

 var setOne = new HashSet<string>(textBoxWords.Text
                               .Split(new char [] { '\r', '\n' })
                               .Select(s1 => s1.Trim())
                               .Where(s2 => !String.IsNullOrEmpty(s2)));

由于结果是HashSet,它与你所拥有的不完全相同,但根据你的场景,它看起来可能是你想要完成的更好的数据结构。

答案 1 :(得分:1)

您的示例已经非常简单了。一种选择是:

(from s in textBoxWords.Split(new char[] { '\r', '\n' })
where !string.IsNullOrEmpty(s)
select s.Trim()).Distinct();