c# – ICollection / ICollection歧义问题
作者:互联网
只想为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));
}
当我处理一些收藏品时,它可以很好地工作,但是当与其他人合作时,我得到了
The call is ambiguous between the
following methods or properties:
‘PowerOn.ExtensionsBasic.IsNotEmpty(System.Collections.IList)’
and
‘PowerOn.ExtensionsBasic.IsNotEmpty(System.Collections.Generic.ICollection)’
这个问题有任何规范的解决方案吗?
不,我不想在调用此方法之前执行强制转换;)
解决方法:
这是因为有些集合实现了两个接口,你应该将集合转换为这样的具体接口
((ICollection)myList).IsNotEmpty();
要么
((ICollection<int>)myIntList).IsNotEmpty();
如果obj == null你会得到NullReferanceException,所以你可以删除null check;)这意味着你的扩展方法只是比较Count whith 0,你可以在没有扩展方法的情况下做;)
标签:c,extension-methods,ambiguous,icollection 来源: https://codeday.me/bug/20190610/1214391.html