将两个列表变量合并为一个操作

时间:2019-04-03 15:33:04

标签: c# linq

首先我要了解的是三个字符串变量

string myVar1 = "hi";
string myVar2 = "bye";
string myVar3 = "who dis";

当前,我正在执行此操作,它“有效”,但我感觉存在冗余:

    List<string> listOne= new List<string>
    {
        myVar1 , myVar2,myVar3 
    };
    listOne= listOne.Where(t => !string.IsNullOrWhiteSpace(t)).Select(t => t).ToList();

    var whatIFinallyWantToHave= new HashSet<string>(listOne, StringComparer.OrdinalIgnoreCase);

我认为应该有一种方法摆脱listOne并一次性完成。你知不知道怎么? (请注意,我们仍然需要忽略listOne正在清除的空字符串或空字符串。)

2 个答案:

答案 0 :(得分:1)

在这种情况下,我认为值得添加扩展名,以便您可以直接从列表链接到集合。这样,您无需中断流程即可显式构造哈希集。也许:

public static class Extensions
{
    public static HashSet<T> ToHashSet<T>(
        this IEnumerable<T> source,
        IEqualityComparer<T> comparer = null)
    {
        return new HashSet<T>(source, comparer);
    }
}

并像这样使用它:

string myVar1 = "hi";
string nully = null;
string myVar2 = "bye";
string empty = "";
string myVar3 = "who dis";
string dup = "WHO DIS";

List<string> listOne = new List<string>
{
    nully, myVar1, empty, myVar2 ,myVar3, dup
};

listOne
    .Where(t => !string.IsNullOrWhiteSpace(t))
    .ToHashSet(StringComparer.OrdinalIgnoreCase)
    .ToList()
    .ForEach(Console.WriteLine);
// hi
// bye
// who dis

答案 1 :(得分:1)

没有理由创建List或拥有一个单独的变量,但是您必须以某种方式组合各个值。另外,没有理由仅由于进行过滤而创建(还)另一个List

string myVar1 = "hi";
string myVar2 = "bye";
string myVar3 = "who dis";

var whatIFinallyWantToHave = new[] { myVar1, myVar2, myVar3 }
                             .Where(s => !String.IsNullOrWhiteSpace(s))
                             .ToHashSet(StringComparer.OrdinalIgnoreCase);

注意:ToHashSet方法需要.Net 4.7.2。