[英]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.