// Tạo một danh sách khách hàng với dữ liệu mẫu tin Danh sách tĩnhCreateCustomerList ()
{// Tương tự như trong Ví dụ 13-1}}}
Output: (Tương tự như trong Ví dụ 13-1)
Ví dụ 13-5 tìm kiếm những khách hàng mà tên đầu tiên là "Donna" sử dụng một biểu thức truy vấn với một điều khoản trong đó. Dưới đây là các mã gốc từ Ví dụ 13-1:
IEnumerablekết quả = từ khách hàng trong khách hàng, nơi customer.FirstName == "Donna" chọn khách hàng; Dưới đây là phần mở rộng ở đâu () phương pháp:
IEnumerablekết quả = customers.Where (khách hàng => customer.FirstName == "Donna"); Bạn có thể nhận thấy rằng các điều khoản lựa chọn dường như đã biến mất trong ví dụ này. Để biết chi tiết về vấn đề này, xin vui lòng xem bên, "đi đâu các khoản chọn?" (Và hãy nhớ, như Chico Marx nhắc nhở chúng ta, "Có phải là không có những điều như một khoản Sanity.")
Đi đâu các khoản chọn? Các selectisomittedbecauseweusetheresultingcustomerobjectwithoutprojecting itintoadifferentform.Therefore, Where () methodfromExample 13-4isthesame như này: IEnumerablekết quả = customers.Where (khách hàng => customer.FirstName == "Donna") Chọn (khách hàng => khách hàng). Nếu một dự của kết quả là cần thiết, bạn sẽ cần phải sử dụng các phương thức Select. Ví dụ, nếu bạn muốn lấy địa chỉ email của Donna thay vì toàn bộ đối tượng khách hàng, bạn có thể sử dụng câu lệnh sau: IEnumerablekết quả = customers.Where (khách hàng => customer.FirstName == "Donna") .Select (khách hàng => customer.EmailAddress);
Nhớ lại rằng khách hàng là các loại List, Mà có thể dẫn bạn nghĩ rằng Danh sáchphải thực hiện các trường hợp phương pháp để hỗ trợ LINQ. Nó không. Các trường hợp phương pháp được gọi là phương pháp mở rộng bởi vì nó kéo dài một loại hiện có. Trước khi chúng ta đi vào chi tiết hơn trong ví dụ này, chúng ta hãy xem xét kỹ hơn phương pháp khuyến nông.
De fi hoạch và Sử dụng phương pháp mở rộng C # 3.0 giới thiệu phương pháp mở rộng cung cấp khả năng cho các lập trình để thêm các phương pháp để loại hiện có. Ví dụ, System.String không cung cấp một hàm Right () trả về n ký tự bên phải nhất của một chuỗi. Nếu bạn sử dụng chức năng này rất nhiều trong ứng dụng của bạn, bạn có thể xem xét việc xây dựng và thêm nó vào thư viện của bạn. Tuy nhiên, System.String được định nghĩa như niêm phong, vì vậy bạn không có thể phân nó. Nó không phải là một lớp một phần, vì vậy bạn không thể mở rộng nó sử dụng tính năng này. Tất nhiên, bạn không thể sửa đổi các thư viện .NET lõi trực tiếp hoặc. Vì vậy, bạn sẽ phải xác định phương pháp trợ giúp của chính bạn bên ngoài của System.String và gọi nó với cú pháp như sau:
MyHelperClass.GetRight (aString, n) Đây không phải là chính xác trực quan. Với C # 3.0, tuy nhiên, có một giải pháp thanh lịch hơn. Bạn thực sự có thể thêm một phương pháp để các lớp System.String; nói cách khác, bạn có thể mở rộng các lớp System.String mà không cần phải sửa đổi các lớp chính nó. Như một phương pháp được gọi là phương pháp khuyến nông. Ví dụ 13-6 cho thấy làm thế nào để xác định và sử dụng một phương pháp khuyến nông
Ví dụ 13-6. Định nghĩa và sử dụng các phương pháp khuyến nông
using System;
Programming_CSharp_Extensions namespace {// lớp container cho phương pháp mở rộng. ExtensionMethods public class tĩnh {// Trả về một chuỗi chứa bìa phải // n ký tự trong một chuỗi cụ thể. công chuỗi tĩnh Right (chuỗi này s, int n) {if (n <0 || n> s.Length) return s; khác trở s.Substring (s.Length - n); }}
Public class Tester {public static void Main () {string hello = "Hello"; Console.WriteLine ( "hello.Right (-1) = {0}", hello.Right (-1)); Console.WriteLine ( "hello.Right (0) = {0}", hello.Right (0)); Console.WriteLine ( "hello.Right (3) = {0}", hello.Right (3)); Console.WriteLine ( "hello.Right (5) = {0}", hello.Right (5)); Console.WriteLine ( "hello.Right (6) = {0}", hello.Right (6));
}}}
Output: hello.Right (-1) = Xin chào hello.Right (0) = hello.Right ( 3) = llo hello.Right (5) = Xin chào hello.Right (6) = Xin chào
đang được dịch, vui lòng đợi..
