ใช้นิพจน์แลมบ์ดา
MyClass result = list.Find(x => x.GetId() == "xy");
หมายเหตุ: C # มีไวยากรณ์ในตัวสำหรับคุณสมบัติ แทนที่จะเขียนเมธอด getter และ setter (อย่างที่คุณคุ้นเคยจาก Java) ให้เขียน
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
เป็นคีย์เวิร์ดตามบริบทที่รู้จักเฉพาะใน set accessor แสดงถึงค่าที่กำหนดให้กับคุณสมบัติ
ตั้งแต่รูปแบบนี้มักจะใช้, C # ให้ คุณสมบัติอัตโนมัติดำเนินการ เป็นโค้ดสั้น ๆ ด้านบน อย่างไรก็ตามตัวแปรสำรองจะถูกซ่อนและไม่สามารถเข้าถึงได้ (สามารถเข้าถึงได้จากภายในคลาสใน VB อย่างไรก็ตาม)
public string Id { get; set; }
คุณสามารถใช้คุณสมบัติราวกับว่าคุณกำลังเข้าถึงฟิลด์:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
เมื่อใช้คุณสมบัติคุณจะค้นหารายการในรายการเช่นนี้
MyClass result = list.Find(x => x.Id == "xy");
คุณยังสามารถใช้คุณสมบัติที่ติดตั้งอัตโนมัติได้หากคุณต้องการคุณสมบัติแบบอ่านอย่างเดียว:
public string Id { get; private set; }
สิ่งนี้ช่วยให้คุณสามารถตั้งค่าId
ภายในชั้นเรียน แต่ไม่ใช่จากภายนอก หากคุณต้องการตั้งค่าในคลาสที่ได้รับมาด้วยเช่นกันคุณสามารถป้องกันเซ็ตเตอร์ได้
public string Id { get; protected set; }
และสุดท้ายคุณสามารถประกาศคุณสมบัติเป็นvirtual
และลบล้างคุณสมบัติเหล่านั้นในคลาสที่ได้มาซึ่งช่วยให้คุณสามารถจัดเตรียมการนำไปใช้งานที่แตกต่างกันสำหรับ getters และ setters เช่นเดียวกับวิธีการเสมือนทั่วไป
ตั้งแต่ C # 6.0 (Visual Studio 2015, Roslyn) คุณสามารถเขียนคุณสมบัติอัตโนมัติของ getter-only ด้วยตัวเริ่มต้นแบบอินไลน์
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
คุณยังสามารถเริ่มต้นคุณสมบัติ getter-only ภายในตัวสร้างแทนได้ คุณสมบัติอัตโนมัติของ Getter เท่านั้นเป็นคุณสมบัติแบบอ่านอย่างเดียวที่แท้จริงซึ่งแตกต่างจากคุณสมบัติที่ใช้งานอัตโนมัติด้วยตัวตั้งค่าส่วนตัว
สิ่งนี้ใช้ได้กับคุณสมบัติอัตโนมัติแบบอ่าน - เขียน:
public string Id { get; set; } = "A07";
เริ่มต้นด้วย C # 6.0 คุณยังสามารถเขียนคุณสมบัติเป็นสมาชิกที่มีนิพจน์ได้
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
ดู: .NET Compiler Platform ("Roslyn")
คุณลักษณะภาษาใหม่ใน C # 6
เริ่มต้นด้วยC # 7.0ทั้ง getter และ setter สามารถเขียนด้วย expression body:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
โปรดทราบว่าในกรณีนี้ setter ต้องเป็นนิพจน์ มันไม่สามารถเป็นคำสั่ง ตัวอย่างข้างต้นใช้งานได้เนื่องจากใน C # งานสามารถใช้เป็นนิพจน์หรือเป็นคำสั่งได้ ค่าของนิพจน์การกำหนดคือค่าที่กำหนดโดยที่การกำหนดเองเป็นผลข้างเคียง นี้จะช่วยให้คุณสามารถกำหนดค่าให้กับตัวแปรมากกว่าหนึ่งในครั้งเดียว: x = y = z = 0
เทียบเท่ากับและมีผลเช่นเดียวกับงบx = (y = (z = 0))
x = 0; y = 0; z = 0;
เวอร์ชันถัดไปของภาษา C # 9.0 ซึ่งอาจพร้อมใช้งานในเดือนพฤศจิกายน 2020 จะอนุญาตคุณสมบัติอ่านอย่างเดียว (หรือดีกว่าเริ่มต้นครั้งเดียว) ที่คุณสามารถเริ่มต้นในตัวเริ่มต้นอ็อบเจ็กต์ ขณะนี้ไม่สามารถทำได้ด้วยคุณสมบัติ getter-only
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
มันจะรู้อยู่แล้วว่าคุณกำลังมองหาคีย์หลัก สำหรับข้อมูล