linq-DefaultIfEmpty

源码:

        public static IEnumerable<TSource> DefaultIfEmpty<TSource>(this IEnumerable<TSource> source) {
            return DefaultIfEmpty(source, default(TSource));
        }
 
        public static IEnumerable<TSource> DefaultIfEmpty<TSource>(this IEnumerable<TSource> source, TSource defaultValue) {
            if (source == null) throw Error.ArgumentNull("source");
            return DefaultIfEmptyIterator<TSource>(source, defaultValue);
        }
 
        static IEnumerable<TSource> DefaultIfEmptyIterator<TSource>(IEnumerable<TSource> source, TSource defaultValue) {
            using (IEnumerator<TSource> e = source.GetEnumerator()) {
                if (e.MoveNext()) {
                    do {
                        yield return e.Current;
                    } while (e.MoveNext());
                }
                else {
                    yield return defaultValue;
                }
            }
        }

 Console.WriteLine(default(int));  // output: 0

这个也很好理解,如果对应集合没有值则返回对应类型的默认值。

int[] ss = new int[10];
var sst = ss.DefaultIfEmpty();

返回的数组元素都被初始化为0.

posted @ 2021-11-16 15:18  vba是最好的语言  阅读(142)  评论(0编辑  收藏  举报