Any

namespace System.Linq
{
    public static class Enumerable
    {
        public static bool Any<TSource>(this IEnumerable<TSource> source)
        {
            if (source == null) throw Error.ArgumentNull("source");
            using (IEnumerator<TSource> e = source.GetEnumerator())
            {
                if (e.MoveNext()) return true;
            }
            return false;
        }

        public static bool Any<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
        {
            if (source == null) throw Error.ArgumentNull("source");
            if (predicate == null) throw Error.ArgumentNull("predicate");
            foreach (TSource element in source)
            {
                if (predicate(element)) return true;
            }
            return false;
        }

public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source) { if (source == null) throw Error.ArgumentNull("source"); IList<TSource> list = source as IList<TSource>; if (list != null) { if (list.Count > 0) return list[0]; } else { using (IEnumerator<TSource> e = source.GetEnumerator()) { if (e.MoveNext()) return e.Current; } } return default(TSource); } public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate) { if (source == null) throw Error.ArgumentNull("source"); if (predicate == null) throw Error.ArgumentNull("predicate"); foreach (TSource element in source) { if (predicate(element)) return element; } return default(TSource); } } }

 

改进Any

public static class EnumerableExtensions
{

    #region Any

    public static bool HasAny<TSource>(this IEnumerable<TSource> source)
    {
        if (source == null) { return false; }

        using (IEnumerator<TSource> e = source.GetEnumerator())
        {
            if (e.MoveNext()) return true;
        }

        return false;
    }

    public static bool HasAny<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
    {
        if (source == null || predicate == null) { return false; }

        foreach (var item in source)
        {
            if (predicate(item)) return true;
        }

        return false;
    }

    #endregion

    /// <summary>
    /// 遍历列表时不用再判断列表或数组是否为null
    /// eg: foreach (var item in list.CheckNull()) { }
    /// </summary>
    public static IEnumerable<T> CheckNull<T>(this IEnumerable<T> list)
    {
        return list == null ? new List<T>(0) : list;
    }
}

 

posted @ 2016-11-03 22:32  茗::流  阅读(162)  评论(0)    收藏  举报
如有雷同,纯属参考。如有侵犯你的版权,请联系我。