7

注意:这与其他问题相似,但并不完全相同

我已经实现了一个IBusinessCollection接口。它来自两者ICollection<T>,以及旧的非泛型ICollection。我宁愿只转储旧的 busted ICollection,但我正在使用带有 CollectionView 的 WPF 数据绑定,它希望我实现旧的 busted 非泛型IList:-(

无论如何,接口看起来像这样:

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

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

public interface ICollection
{ int Count { get; } }

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

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>

4

2 回答 2

12

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

public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
    new int Count { get;  }
}
于 2009-10-12T03:08:15.547 回答
-1
ICollection<string> counter = Factory.Get();
counter.Count; // No longer ambiguous
于 2009-10-12T03:04:51.813 回答