【发布时间】:2010-12-05 09:27:36
【问题描述】:
只想为syntactic sygar做一个简单的扩展:
public static bool IsNotEmpty(this ICollection obj)
{
return ((obj != null)
&& (obj.Count > 0));
}
public static bool IsNotEmpty<T>(this ICollection<T> obj)
{
return ((obj != null)
&& (obj.Count > 0));
}
当我使用一些集合时它工作得很好,但是当我与其他人一起工作时,我得到了
之间的调用是模棱两可的 以下方法或属性: 'PowerOn.ExtensionsBasic.IsNotEmpty(System.Collections.IList)' 和 'PowerOn.ExtensionsBasic.IsNotEmpty(System.Collections.Generic.ICollection)'
这个问题有什么规范的解决方案吗?
不,我不想在调用此方法之前执行强制转换;)
【问题讨论】:
-
你能举出一个有这个问题的集合,以便我们验证我们的答案吗?
-
你确定这些是声明吗?错误消息似乎表明它是 IList 而不是 ICollection。
-
第二种方法还有必要吗?
-
这在使用接口时特别需要(当您不知道正在使用的实例的具体类型时):ICollection
不实现 ICollection... -
@Jon Skeet:这是因为
List<T>实现了ICollection和IList<T>,而IList<T>继承了ICollection<T>。所以List<T>实现了ICollection和ICollection<T>。
标签: c# extension-methods icollection ambiguous