注意:这与 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 种方法可以编译,但都很难看。
将类转换为它的具体实现(我可能不知道)
将类显式转换为
ICollection
将类显式转换为
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/