Computer >> 컴퓨터 >  >> 프로그램 작성 >> C#

Linq C#에서 Last()와 LastOrDefault()의 차이점은 무엇입니까?

<시간/>

Last() 및 LastOrDefault() 모두 값의 마지막 항목을 가져옵니다. 그러나 Last()와 LastOrDefault()의 주요 차이점은 제공된 기준에 대한 결과 데이터가 없는 경우 Last()가 예외를 throw하는 반면 결과 데이터가 없는 경우 LastOrDefault()는 기본값(null)을 반환한다는 것입니다.

시퀀스에 적어도 하나의 요소가 있을 것이라는 것을 알았을 때 Last()를 사용하십시오. 데이터가 확실하지 않은 경우 LastOrDefault()를 사용하십시오.

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ConsoleApp {
   public class Student {
      public int Id { get; set; }
      public string Name { get; set; }
   }
   class Program {
      static void Main() {
         var studentsList = new List<Student> {
            new Student {
               Id = 1,
               Name = "John"
            },
            new Student {
               Id = 2,
               Name = "Jack"
            },
            new Student {
               Id = 1,
               Name = "Jill"
            }
         };
         var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 1);
         var lastStudent = studentsList.Last(student => student.Id == 1);
         Console.WriteLine($"LastOrDefault: {lastOrDefaultStudent.Id} {lastOrDefaultStudent.Name}");
         Console.WriteLine($"Last: {lastStudent.Id} {lastStudent.Name}");
         Console.ReadLine();
      }
   }
}

출력

위 코드의 출력은

LastOrDefault: 1 Jill
Last: 1 Jill

using System;
using System.Collections.Generic;
using System.Linq;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         try {
            var studentsList = new List<Student> {
               new Student {
                  Id = 1,
                  Name = "John"
               },
               new Student {
                  Id = 2,
                  Name = "Jack"
               }
            };
            var lastOrDefaultStudent = studentsList.LastOrDefault(student => student.Id == 3);
            var value = lastOrDefaultStudent == null ? "null" : "";
            Console.WriteLine($"LastOrDefault: {value}");
            var lastStudent = studentsList.Last(student => student.Id == 3);
         }
         catch (Exception ex) {
            Console.WriteLine($"Last Exception: {ex.Message}");
            Console.ReadLine();
         }
      }
   }
   public class Student {
      public int Id { get; set; }
      public string Name { get; set; }
   }
}

출력

위 코드의 출력은

LastOrDefault: null
Last Exception: Sequence contains no matching element

여기서 ID "3"은 StudentsList에 없습니다. 따라서 LastOrDefault()는 null 값을 반환하는 반면 Last()는 예외를 발생시킵니다.