为了账号安全,请及时绑定邮箱和手机立即绑定

LastOrDefault() 和 Last() 方法是否迭代列表中的每个元素?

LastOrDefault() 和 Last() 方法是否迭代列表中的每个元素?

C#
繁华开满天机 2021-10-09 10:28:15
LastOrDefault() 和 Last() 方法是否迭代列表中的每个元素以找到最后一个元素?或者他们是否通过基于元素的索引进行搜索来返回值?
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

如果它是一个类型,IList那么不,它不会迭代每个元素,因为这会非常低效。


这就是他们所做的:


public static TSource Last<TSource>(this IEnumerable<TSource> source) {

        if (source == null) throw Error.ArgumentNull("source");

        IList<TSource> list = source as IList<TSource>;

        if (list != null) {

            int count = list.Count;

            if (count > 0) return list[count - 1];

        }

        else {

            using (IEnumerator<TSource> e = source.GetEnumerator()) {

                if (e.MoveNext()) {

                    TSource result;

                    do {

                        result = e.Current;

                    } while (e.MoveNext());

                    return result;

                }

            }

        }

        throw Error.NoElements();

    }

和LastOrDefault:


public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source) {

            if (source == null) throw Error.ArgumentNull("source");

            IList<TSource> list = source as IList<TSource>;

            if (list != null) {

                int count = list.Count;

                if (count > 0) return list[count - 1];

            }

            else {

                using (IEnumerator<TSource> e = source.GetEnumerator()) {

                    if (e.MoveNext()) {

                        TSource result;

                        do {

                            result = e.Current;

                        } while (e.MoveNext());

                        return result;

                    }

                }

            }

            return default(TSource);

}

请注意,由于每种方法都有几个重载,我在上面只展示了其中一个,但是如果您对其他方法感兴趣


查看完整回答
反对 回复 2021-10-09
  • 1 回答
  • 0 关注
  • 165 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信