Sử dụng biểu thức lambda
MyClass result = list.Find(x => x.GetId() == "xy");
Lưu ý: C # có một cú pháp tích hợp cho các thuộc tính. Thay vì viết các phương thức getter và setter (như bạn có thể quen với Java), hãy viết
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
là một từ khóa theo ngữ cảnh chỉ được biết đến trong bộ truy cập tập hợp. Nó đại diện cho giá trị được gán cho thuộc tính.
Vì mẫu này thường được sử dụng, C # cung cấp các thuộc tính được triển khai tự động . Chúng là một phiên bản ngắn của đoạn mã trên; tuy nhiên, biến ủng hộ bị ẩn và không thể truy cập được (tuy nhiên, nó có thể truy cập từ bên trong lớp trong VB).
public string Id { get; set; }
Bạn có thể chỉ cần sử dụng các thuộc tính như thể bạn đang truy cập một trường:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Sử dụng thuộc tính, bạn sẽ tìm kiếm các mục trong danh sách như thế này
MyClass result = list.Find(x => x.Id == "xy");
Bạn cũng có thể sử dụng các thuộc tính được triển khai tự động nếu bạn cần thuộc tính chỉ đọc:
public string Id { get; private set; }
Điều này cho phép bạn thiết lập Id
bên trong lớp chứ không phải từ bên ngoài. Nếu bạn cần thiết lập nó trong các lớp dẫn xuất, bạn cũng có thể bảo vệ setter
public string Id { get; protected set; }
Và cuối cùng, bạn có thể khai báo thuộc tính virtual
và ghi đè chúng trong các lớp dẫn xuất, cho phép bạn cung cấp các triển khai khác nhau cho getters và setters; cũng như đối với các phương thức ảo thông thường.
Kể từ C # 6.0 (Visual Studio 2015, Roslyn), bạn có thể viết thuộc tính tự động chỉ getter với trình khởi tạo nội tuyến
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Thay vào đó, bạn cũng có thể khởi tạo các thuộc tính chỉ getter trong hàm tạo. Thuộc tính tự động chỉ getter là thuộc tính chỉ đọc thực sự , không giống như các thuộc tính được triển khai tự động với trình cài đặt riêng.
Điều này cũng hoạt động với các thuộc tính tự động đọc-ghi:
public string Id { get; set; } = "A07";
Bắt đầu với C # 6.0, bạn cũng có thể viết các thuộc tính dưới dạng các thành viên thân biểu thức
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Xem: Nền tảng biên dịch .NET ("Roslyn")
Các tính năng ngôn ngữ mới trong C # 6
Bắt đầu với C # 7.0 , cả hai, getter và setter, đều có thể được viết bằng các phần thân biểu thức:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Lưu ý rằng trong trường hợp này, setter phải là một biểu thức. Nó không thể là một tuyên bố. Ví dụ trên hoạt động, bởi vì trong C #, một phép gán có thể được sử dụng như một biểu thức hoặc như một câu lệnh. Giá trị của một biểu thức gán là giá trị được gán trong đó bản thân phép gán là một tác dụng phụ. Điều này cho phép bạn gán một giá trị cho nhiều biến cùng một lúc: x = y = z = 0
tương đương x = (y = (z = 0))
và có cùng tác dụng với các câu lệnh x = 0; y = 0; z = 0;
.
Phiên bản tiếp theo của ngôn ngữ, C # 9.0, có thể có vào tháng 11 năm 2020, sẽ cho phép các thuộc tính chỉ đọc (hoặc tốt hơn là khởi tạo một lần) mà bạn có thể khởi tạo trong trình khởi tạo đối tượng. Điều này hiện không thể thực hiện được với các thuộc tính chỉ dành cho người nhận.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Nó sẽ biết rằng bạn đang tìm kiếm khóa chính. Chỉ để biết thêm thông tin thôi.