c# - ICollection 与 ICollection<T> - ICollection<T>.Count 和 ICollection.Count 之间的歧义

标签 c# generics icollection

注意:这与 this other question 相似,但不完全相同

我已经实现了一个 IBusinessCollection界面。它来自 ICollection<T> ,以及旧的非通用 ICollection .我宁愿扔掉旧的破烂 ICollection ,但我将 WPF 数据绑定(bind)与 CollectionView 一起使用,它希望我实现旧的非泛型 IList :-(

无论如何,界面看起来像这样:

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }

public interface ICollection<T>
{ int Count { get; } }

public interface ICollection
{ int Count { get; } }

由于使用依赖注入(inject),我传递了 IBusinessCollection<T> 类型的对象使用它们的接口(interface),不是具体类型,所以我有这样的东西:

internal class AnonymousCollection : IBusinessCollection<string>
{ 
    public int Count { get { return 5; } }
}

public class Factory
{
    public static IBusinessCollection<string> Get()
    { return new AnonymousCollection(); }
}

当我尝试调用这段代码时,出现如下错误:

var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'

有 3 种方法可以编译,但都很难看。

  1. 将类转换为它的具体实现(我可能不知道)

  2. 将类显式转换为 ICollection

  3. 将类显式转换为 ICollection<T>

是否有第四个选项完全不需要我施法?我可以根据需要进行任何更改 IBusinessCollection<T>

最佳答案

这似乎解决了我快速测试中的问题。

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
    new int Count { get;  }
}

关于c# - ICollection 与 ICollection<T> - ICollection<T>.Count 和 ICollection.Count 之间的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1552456/

相关文章:

c# - 通过匿名委托(delegate)取消订阅事件

c# - AppDomain 和 MarshalByRefObject 生命周期 : how to avoid RemotingException?

java - 填充数组的对象列表 asList 无法编译需要可序列化列表

java - 如何使列表变量的泛型可序列化

c# - 在序列中获取 "next"元素的最简单方法?

C# - 多个属性上的动态 Linq 左外连接

c# - OracleConnectionPoolManager 在其终结器中抛出异常

java - 是否有隐式扩展到泛型类型的可空注释?

c# - List<T>.ToList() 是否枚举集合

c# - 从 ICollection<T> 到 List<T> 的 Linq 转换