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

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

概述以下两种方法之间的语义差异是什么: public static bool IsNullOrEmpty(this Array value){ return (value == null || value.Length == 0);} 和 public static bool IsNullOrEmpty<T>(this T[] value){ return (value == n 以下两种方法之间的语义差异是什么:

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查询,最终会与数据库交谈.

总结

以上是内存溢出为你收集整理的c# – 关于两种不同类扩展模式的问题全部内容,希望文章能够帮你解决c# – 关于两种不同类扩展模式的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1217064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存