gpt4 book ai didi

c# - ICollection/ICollection 歧义问题

转载 作者:太空狗 更新时间:2023-10-30 00:36:33 24 4
gpt4 key购买 nike

只想对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)'

这个问题有什么规范的解决方案吗?

不,我不想在调用此方法之前执行强制转换 ;)

最佳答案

因为有些集契约(Contract)时实现了这两个接口(interface),你应该像这样将集合转换为具体接口(interface)

((ICollection)myList).IsNotEmpty();

或者

((ICollection<int>)myIntList).IsNotEmpty();

是的,如果 obj == null,您将得到 NullReferanceException,因此您可以删除 null 检查 ;) 这意味着您的扩展方法只比较 Count 和 0,您可以在没有扩展方法的情况下进行 ;)

关于c# - ICollection/ICollection<T> 歧义问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1544480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com