Ori*_*rds 6 c# generics icollection
注意:这与其他问题类似,但不完全相同
我已经实现了一个IBusinessCollection界面.它既来自两者ICollection<T>,又来自旧的非泛型ICollection.我更喜欢抛弃旧的破坏ICollection,但我正在使用带有CollectionView的WPF数据绑定,它希望我实现旧的非泛型IList:-(
无论如何,接口看起来像这样:
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }
public interface ICollection<T>
{ int Count { get; } }
public interface ICollection
{ int Count { get; } }
Run Code Online (Sandbox Code Playgroud)
由于使用依赖注入,我IBusinessCollection<T>使用它们的接口传递类型的对象,而不是具体的类型,所以我有这样的东西:
internal class AnonymousCollection : IBusinessCollection<string>
{
public int Count { get { return 5; } }
}
public class Factory
{
public static IBusinessCollection<string> Get()
{ return new AnonymousCollection(); }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试调用此代码时,出现错误,如下所示:
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'
Run Code Online (Sandbox Code Playgroud)
有三种方法可以进行编译,但所有这些方法都很难看.
把课程转化为它的具体实现(我可能不知道)
明确地将类强制转换为 ICollection
明确地将类强制转换为 ICollection<T>
是否有第四种选择,根本不需要我施展东西?我可以做出我需要做的任何改变IBusinessCollection<T>
Joh*_*her 10
这似乎解决了我的快速测试中的问题.
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
new int Count { get; }
}
Run Code Online (Sandbox Code Playgroud)