繁体   English   中英

C#通用通配符

[英]C# generic wildcards

我花了很多时间解决这个问题,但是我无法弄清楚。 我有以下Java方法签名:

public static <T> boolean isSameCollectionSets(
    Collection<? extends Collection<T>> set1, 
    Collection<? extends Collection<T>> set2)

此方法采用T类型的集合的两个集合。它在Java中工作。 同样,编译器在传递正确的参数时也可以自己获得类型T。

现在,我想将此完全相同的方法移植到C#。 到目前为止,我有这个:

public static bool IsSameCollectionSets<T>(ICollection<T> set1, ICollection<T> set2) 
    where T : ICollection<T>

但是,当我尝试在C#中执行以下操作时,此操作将失败:

ICollection<List<int>> collection1 = new List<List<int>>();
ICollection<HashSet<int>> collection2 = new HashSet<HashSet<int>>();

var result = IsSameCollectionSets(collection1, collection2);

IsSameCollectionSets方法带有下划线,并且编译器显示:

“无法从用法中推断方法'bool IsSameCollectionSets(ICollection,ICollection)'的类型参数。尝试显式指定类型参数。”

现在,我尝试显式地指定类型参数,但是到目前为止,仍然没有任何效果。

我的错误在哪里? 提前谢谢了!

感谢@Rob,我找到了一个可行的解决方案。

代替使用ICollection<T>我使用IEnumerable<T>

public static bool IsSameCollectionSets<T>(IEnumerable<IEnumerable<T>> set1,
IEnumerable<IEnumerable<T>> set2)

另外,与问题中的代码相比,我使用接口进行实例化:

ICollection<IList<int>> collection1 = new List<IList<int>>();
ICollection<ISet<int>> collection2 = new HashSet<ISet<int>>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM