最佳实现方式是什么?
var set2 = new HashSet<reference_type>();
使用 foreach 循环遍历集合,代码如下。
foreach (var n in set)
set2.Add(n);
或者像这样使用联合。
set2 = set.UnionWith(set); // all the elements
最佳实现方式是什么?
var set2 = new HashSet<reference_type>();
使用 foreach 循环遍历集合,代码如下。
foreach (var n in set)
set2.Add(n);
或者像这样使用联合。
set2 = set.UnionWith(set); // all the elements
使用构造函数:
HashSet<type> set2 = new HashSet<type>(set1);
就我个人而言,我希望 LINQ to Objects 也有一个像 List
和 Dictionary
一样的 ToHashSet
扩展方法。当然,自己创建一个很容易:
public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
if (source == null)
{
throw new ArgumentNullException("source");
}
return new HashSet<T>(source);
}
(使用自定义相等比较器的其他重载函数。)
这使得创建匿名类型的集合变得容易。
最好的方式是主观的,但我会按照以下方式进行:
set2 = new HashSet<type>(set);
或者更好的做法:
set2 = new HashSet<type>(set, set.Comparer);
这可以确保您使用与原始HashSet相同的相等比较器。例如,如果原始集合是不区分大小写的 HashSet<string>
,则您的新集合也将是不区分大小写的。
这可能是最简单和最好的:
HashSet<int> s = new HashSet<int>{1,2,3};
HashSet<int> t = new HashSet<int>(s);
来自MSDN文档:
HashSet<T>(IEnumerable<T> collection)