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查询,最终会与数据库交谈. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |