首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICollection与vs <T>-- ICollection<T>.Count与ICollection.Count的歧义

ICollection与vs <T>-- ICollection<T>.Count与ICollection.Count的歧义
EN

Stack Overflow用户
提问于 2009-10-12 02:42:48
回答 2查看 2.4K关注 0票数 7

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

我实现了一个IBusinessCollection接口。它既从ICollection<T>中剥离出来,也从旧的非通用ICollection中剥离出来。我更愿意转储旧的已崩溃的ICollection,但是我使用WPF绑定一个CollectionView,它希望我实现旧的非通用IList :-(

无论如何,接口看起来如下:

代码语言:javascript
复制
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{ }

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

public interface ICollection
{ int Count { get; } }

由于使用依赖项注入,我使用IBusinessCollection<T>类型的对象的接口传递对象,而不是通过具体类型传递对象,因此我有如下所示:

代码语言:javascript
复制
internal class AnonymousCollection : IBusinessCollection<string>
{ 
    public int Count { get { return 5; } }
}

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

当我尝试调用此代码时,会得到一个错误,如下所示:

代码语言:javascript
复制
var counter = Factory.Get();
counter.Count; // Won't compile
// Ambiguity between 'ICollection<string>.Count' and 'ICollection.Count'

有三种方法使这个编译,但它们都是丑陋的。

ICollection

  • Cast

  • 将类强制转换到它的具体实现(我可能不知道),

  • 显式地将类强制转换为ICollection<T>

,该类显式地转换为

有没有第四种选择,根本不需要我投东西?我可以对IBusinessCollection<T>做任何必要的修改

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-12 03:08:15

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

代码语言:javascript
复制
public interface IBusinessCollection<T> : ICollection<T>, ICollection
{
    new int Count { get;  }
}
票数 12
EN

Stack Overflow用户

发布于 2009-10-12 03:04:51

代码语言:javascript
复制
ICollection<string> counter = Factory.Get();
counter.Count; // No longer ambiguous
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1552456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档