چه تکنولوژی می‌خواهید یاد بگیرید؟

نظرات و انتقادات خود را با ما در میان بگذارید.

آپدیت روزانه

بیش از 1000 پست آموزشی

نیازهای روز

تفاوت بین متد الحاقی FirstOrDefault و First در فضاء نام System.Linq

متد الحاقی FirstOrDefault و First از پرکاربردترین اعضاء موجود در فضاء نام System.Linq می‌باشند که می‌توان به آن اشاره نمود. اگر اخیرا با این متدها آشنا شده‌اید، کدهای زیر که بدنه تشکیل دهنده این دو متد الحاقی با دو Overloadهای مختلف آن را شامل می‌شود جهت درک تفاوت‌های این دو متد مفید خواهد بود:

/// <summary>Returns the first element of a sequence.</summary>
/// <param name="source">The <see cref="T:System.Collections.Generic.IEnumerable`1" /> to return the first element of.</param>
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
/// <returns>The first element in the specified sequence.</returns>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="source" /> is null.</exception>
/// <exception cref="T:System.InvalidOperationException">The source sequence is empty.</exception>
public static TSource First<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
        throw Error.ArgumentNull("source");
    IList<TSource> sourceList = source as IList<TSource>;
    if (sourceList != null)
    {
        if (sourceList.Count > 0)
            return sourceList[0];
    }
    else
    {
        using (IEnumerator<TSource> enumerator = source.GetEnumerator())
        {
            if (enumerator.MoveNext())
                return enumerator.Current;
        }
    }
    throw Error.NoElements();
}

/// <summary>Returns the first element in a sequence that satisfies a specified condition.</summary>
/// <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1" /> to return an element from.</param>
/// <param name="predicate">A function to test each element for a condition.</param>
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
/// <returns>The first element in the sequence that passes the test in the specified predicate function.</returns>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="source" /> or <paramref name="predicate" /> is null.</exception>
/// <exception cref="T:System.InvalidOperationException">No element satisfies the condition in <paramref name="predicate" />.-or-The source sequence is empty.</exception>
public static TSource First<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 source1 in source)
    {
        if (predicate(source1))
            return source1;
    }
    throw Error.NoMatch();
}

/// <summary>Returns the first element of a sequence, or a default value if the sequence contains no elements.</summary>
/// <param name="source">The <see cref="T:System.Collections.Generic.IEnumerable`1" /> to return the first element of.</param>
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
/// <returns>default(<paramref name="TSource" />) if <paramref name="source" /> is empty; otherwise, the first element in <paramref name="source" />.</returns>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="source" /> is null.</exception>
public static TSource FirstOrDefault<TSource>(this IEnumerable<TSource> source)
{
    if (source == null)
        throw Error.ArgumentNull("source");
    IList<TSource> sourceList = source as IList<TSource>;
    if (sourceList != null)
    {
        if (sourceList.Count > 0)
            return sourceList[0];
    }
    else
    {
        using (IEnumerator<TSource> enumerator = source.GetEnumerator())
        {
            if (enumerator.MoveNext())
                return enumerator.Current;
        }
    }
    return default(TSource);
}

/// <summary>Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.</summary>
/// <param name="source">An <see cref="T:System.Collections.Generic.IEnumerable`1" /> to return an element from.</param>
/// <param name="predicate">A function to test each element for a condition.</param>
/// <typeparam name="TSource">The type of the elements of <paramref name="source" />.</typeparam>
/// <returns>default(<paramref name="TSource" />) if <paramref name="source" /> is empty or if no element passes the test specified by <paramref name="predicate" />; otherwise, the first element in <paramref name="source" /> that passes the test specified by <paramref name="predicate" />.</returns>
/// <exception cref="T:System.ArgumentNullException">
/// <paramref name="source" /> or <paramref name="predicate" /> is null.</exception>
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 source1 in source)
    {
        if (predicate(source1))
            return source1;
    }
    return default(TSource);
}


...

امید نصری

0 نظر:

تعداد دیدگاه‌های کاربران : 0 دیدگاه
مهمان گرامی! برای ارسال نظر نیاز است وارد سایت شوید.


You must ورود to comment.