注意:这与另一个问题相似,但并不完全相同。
我实现了一个IBusinessCollection接口。它同时继承了ICollection<T>和旧的非泛型ICollection。我希望只使用泛型ICollection<T>,但我正在使用WPF数据绑定,并且CollectionView要求我实现旧的非泛型IList :-(
无论如何,这些接口看起来像这样:
有三种方法可以使这个编译通过,但它们都不太好看。
我实现了一个IBusinessCollection接口。它同时继承了ICollection<T>和旧的非泛型ICollection。我希望只使用泛型ICollection<T>,但我正在使用WPF数据绑定,并且CollectionView要求我实现旧的非泛型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'
有三种方法可以使这个编译通过,但它们都不太好看。
- 将类转换为其具体实现(我可能不知道)
- 将类显式转换为
ICollection
- 将类显式转换为
ICollection<T>
IBusinessCollection<T>
进行任何必要的更改。