gpt4 book ai didi

c# - 如何编写通用扩展方法以使用 HashSet.AddRange() 将 List 转换为 HashSet?

转载 作者:太空宇宙 更新时间:2023-11-03 17:23:07 28 4
gpt4 key购买 nike

HashSet 没有AddRange 方法,所以我想为它写一个扩展方法。这是我的:

public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> list)
{
foreach (var item in list)
{
collection.Add(item);
}
}

我有一个基类 Media 和一个派生类 Photo。这是我想要工作的代码:

var photos = new List<Photo>();
var media = new HashSet<Media>();
media.AddRange(photos);

但是,编译器告诉我它无法转换 List<Photo>IEnumerable<Media>当我尝试使用 AddRange() .我很确定这是因为我有 IEnumerable<T>在扩展方法中,但我该如何编写才能使类型不同于 AddRange<T> 中的类型?

最佳答案

实际上,HashSet<T>可能没有 AddRange方法,但它有一个 UnionWith方法,这在语义上就是您正在寻找的。名称上的差异反射(reflect)了它过滤掉重复项的事实。它还有一个构造函数,它接受 IEnumerable<T>。作为参数,如果您只想将集合复制到 HashSet .

在一般情况下,上述建议使用通用约束(“where T : U”)的答案是正确的。

关于c# - 如何编写通用扩展方法以使用 HashSet.AddRange() 将 List 转换为 HashSet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1590662/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com