加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 关于两种不同类扩展模式的问题

发布时间:2020-12-16 01:45:44 所属栏目:百科 来源:网络整理
导读:以下两种方法之间的语义差异是什么: public static bool IsNullOrEmpty(this Array value){ return (value == null || value.Length == 0);} 和 public static bool IsNullOrEmptyT(this T[] value){ return (value == null || value.Length == 0);} 一个人
以下两种方法之间的语义差异是什么:

public static bool IsNullOrEmpty(this Array value)
{
    return (value == null || value.Length == 0);
}

public static bool IsNullOrEmpty<T>(this T[] value)
{
    return (value == null || value.Length == 0);
}

一个人比另一个人有优势吗?

解决方法

第一个适用于任何数组,包括矩形数组和下限非零的数组.当数组的编译时类型只是数组时,它也会起作用,这可能偶尔会发生在类型相当弱的API上.

简而言之,第一个更通用,并且应该在第二个的任何地方工作.

(我假设你不想要任何“额外”功能,例如第二种形式的T的额外约束……你只需要一些能找出数组引用是空还是空的东西阵列).

编辑:对于IEnumerable,您将使用:

public static bool IsNullOrEmpty(this IEnumerable value)
{
    if (value == null)
    {
        return true;
    }
    var iterator = value.GetEnumerator();
    try
    {
        return !iterator.MoveNext();
    }
    finally
    {
        // Non-generic IEnumerator doesn't extend IDisposable
        IDisposable disposable = iterator as IDisposable;
        if (disposable != null)
        {
            disposable.Dispose();
        }
    }
}

这当然的缺点是它很容易产生副作用 – 例如,你可以传入LINQ查询,最终会与数据库交谈.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读