首先我要了解的是三个字符串变量
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正在清除的空字符串或空字符串。)
答案 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。