عملگرهای انتخاب عنصر Last و LastOrDefault
متد های افزودنی Last و LastOrDefault در LINQ آخرین عنصر موجود در یک مجموعه را باز میگردانند. در جدول زیر می توانید توضیحات مختصری در مورد هر کدام مشاهده کنید:
متد | توضیحات |
Last() | آخرین عنصر موجود در مجموعه یا آخرین عنصری که شرط مشخص شده را برآورده کند را باز می گرداند. اگر عنصری پیدا نکند Exception ایجاد می کند. |
LastOrDefault() | مشابه متد Last عمل می کند با این تفاوت که اگر عنصری پیدا نکند مقدار پیشفرض را باز می گرداند. |
هر یک از این متدها دو overload دارند که اولی آخرین عنصر مجموعه را باز میگرداند و دومی یک عبارت لامبدا یا Func delegate به عنوان ورودی می گیرد و آخرین عنصری که شرط مشخص شده را برآورده کند را باز میگرداند.
1 2 3 4 | public static TSource Last<TSource>(this IEnumerable<TSource> source); public static TSource Last<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source); public static TSource LastOrDefault<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate); |
برای درک بهتر نحوه عملکرد متد Last به مثال زیر توجه کنید:
1 2 3 4 5 6 7 8 9 | IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 }; IList<string> strList = new List<string>() { null, "Two", "Three", "Four", "Five" }; IList<string> emptyList = new List<string>(); Console.WriteLine("Last Element in intList: {0}", intList.Last()); Console.WriteLine("Last Even Element in intList: {0}", intList.Last(i => i % 2 == 0)); Console.WriteLine("Last Element in strList: {0}", strList.Last()); Console.WriteLine("emptyList.Last() throws an InvalidOperationException"); Console.WriteLine("-------------------------------------------------------------"); Console.WriteLine(emptyList.Last()); |
خروجی مثال:
1 2 3 4 5 6 | Last Element in intList: 87 Last Even Element in intList: 50 Last Element in strList: Five emptyList.Last() throws an InvalidOperationException ------------------------------------------------------------- Run-time exception: Sequence contains no elements... |
مثالی برای نمایش نحوه کارکرد متد LastOrDefault:
1 2 3 4 5 6 7 8 | IList<int> intList = new List<int>() { 7, 10, 21, 30, 45, 50, 87 }; IList<string> strList = new List<string>() { null, "Two", "Three", "Four", "Five" }; IList<string> emptyList = new List<string>(); Console.WriteLine("Last Element in intList: {0}", intList.LastOrDefault()); Console.WriteLine("Last Even Element in intList: {0}", intList.LastOrDefault(i => i % 2 == 0)); Console.WriteLine("Last Element in strList: {0}", strList.LastOrDefault()); Console.WriteLine("Last Element in emptyList: {0}", emptyList.LastOrDefault()); |
خروجی مثال:
1 2 3 4 | Last Element in intList: 7 Last Even Element in intList: 50 Last Element in strList: Five Last Element in emptyList: |
توجه داشته باشید که اگر عنصری که توسط متد LastOrDefault بررسی می شود، مقدار null داشته باشد، این متد نیز Exception ایجاد می کند. برای مثال:
1 2 3 4 | IList<string> strList1 = new List<string>() { "Two", "Three", "Four", "Five" }; IList<string> strList2 = new List<string>() { null, "Two", "Three", "Four", "Five" }; Console.WriteLine(strList1.LastOrDefault(s => s.Contains("T"))); Console.WriteLine(strList2.LastOrDefault(s => s.Contains("T")));// throws an exception |
خروجی مثال:
1 | Run-time exception: Sequence contains no matching element |
هیچ نظری ثبت نشده است