コード例 #1
0
ファイル: Single.cs プロジェクト: zouql/runtime
        public static TSource Single <TSource>(this IEnumerable <TSource> source)
        {
            if (source == null)
            {
                ThrowHelper.ThrowArgumentNullException(ExceptionArgument.source);
            }

            if (source is IList <TSource> list)
            {
                switch (list.Count)
                {
                case 0:
                    ThrowHelper.ThrowNoElementsException();
                    return(default);

                case 1:
                    return(list[0]);
                }
            }
            else
            {
                using (IEnumerator <TSource> e = source.GetEnumerator())
                {
                    if (!e.MoveNext())
                    {
                        ThrowHelper.ThrowNoElementsException();
                    }

                    TSource result = e.Current;
                    if (!e.MoveNext())
                    {
                        return(result);
                    }
                }
            }

            ThrowHelper.ThrowMoreThanOneElementException();
            return(default);