Ngôn ngữ LINQ - Toán tử Single
Toán tử phần tử: Single
Phương thức Single trả về phần tử duy nhất của danh sách hoặc phần tử duy nhất thỏa mãn điều kiện. Nếu không có phần tử như vậy tồn tại sẽ ném ra ngoại lệ.
Phương thức Single có hai phương thức quá tải. Phương thức quá tải đầu tiên không lấy bất kỳ tham số đầu vào nào và trả về phần tử duy nhất trong danh sách.
Phương thức quá tải thứ hai lấy biểu thức lambda làm predicate delegate để chỉ định một điều kiện và trả về phần tử duy nhất thỏa mãn điều kiện đã chỉ định.
public static TSource Single<TSource>(this IEnumerable<TSource> source);
public static TSource Single<TSource>(this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
Phương thức Single trả về phần tử duy nhất của danh sách hoặc phần tử duy nhất thỏa mãn điều kiện đã chỉ định bằng biểu thức lambda hoặc delegate Func.
Nếu một danh sách rỗng hoặc không có bất kỳ phần tử nào thỏa mãn điều kiện hoặc có nhiều hơn một phần tử thỏa mãn điều kiện thì nó sẽ ném ra ngoại lệ InvalidOperation.
Ví dụ sau đây minh họa phương thức Single:
IList<int> oneElementList = new List<int>() { 7 };
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("The only element in oneElementList: {0}", oneElementList.Single());
Console.WriteLine("The only element which is less than 10 in intList: {0}",
intList.Single(i => i < 10));
Console.WriteLine("emptyList.Single() throws an InvalidOperationException");
Console.WriteLine("-----------------------------------------------------");
Console.WriteLine(emptyList.Single());
Đây là kết quả khi biên dịch và thực thi chương trình:
The only element in oneElementList: 7
The only element which is less than 10 in intList: 7
emptyList.Single() throws an InvalidOperationException
-----------------------------------------------------
Run-time exception: Sequence contains no elements...
Hãy cẩn thận trong khi chỉ định điều kiện trong phương thức Single. Nó sẽ đưa ra một ngoại lệ nếu danh sách không có bất kỳ phần tử nào hoặc có nhiều hơn một phần tử thỏa mãn điều kiện đã chỉ định.
Sự khác nhau giữa phương thức First và Single
1. Phương thức First
Phương thức First trả về phần tử đầu tiên của danh sách hoặc phần tử đầu tiên thỏa mãn điều kiện đã chỉ định bằng biểu thức lambda hoặc delegate Func.
Nếu có nhiều phần tử thỏa mãn điều kiện đã chỉ định thì nó sẽ trả về phần tử đầu tiên.
Nếu một danh sách rỗng hoặc không có bất kỳ phần tử nào thỏa mãn điều kiện thì nó sẽ ném ra ngoại lệ InvalidOperation.
2. Phương thức Single
Phương thức Single trả về phần tử duy nhất của danh sách hoặc phần tử duy nhất thỏa mãn điều kiện đã chỉ định bằng biểu thức lambda hoặc delegate Func.
Nếu một danh sách rỗng hoặc không có bất kỳ phần tử nào thỏa mãn điều kiện hoặc có nhiều hơn một phần tử thỏa mãn điều kiện thì nó sẽ ném ra ngoại lệ InvalidOperation