Gunakan ekspresi lambda
MyClass result = list.Find(x => x.GetId() == "xy");
Catatan: C # memiliki sintaks bawaan untuk properti. Alih-alih menulis metode pengambil dan penyetel (karena Anda mungkin terbiasa dari Java), tulis
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
adalah kata kunci kontekstual yang hanya diketahui di set accessor. Ini mewakili nilai yang diberikan ke properti.
Karena pola ini sering digunakan, C # menyediakan properti yang diimplementasikan secara otomatis . Mereka adalah versi singkat dari kode di atas; bagaimanapun, variabel pendukung disembunyikan dan tidak dapat diakses (namun dapat diakses dari dalam kelas di VB).
public string Id { get; set; }
Anda cukup menggunakan properti seolah-olah Anda sedang mengakses bidang:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Dengan menggunakan properti, Anda akan mencari item dalam daftar seperti ini
MyClass result = list.Find(x => x.Id == "xy");
Anda juga dapat menggunakan properti yang diimplementasikan secara otomatis jika Anda membutuhkan properti hanya-baca:
public string Id { get; private set; }
Ini memungkinkan Anda untuk mengatur di Id
dalam kelas tetapi tidak dari luar. Jika Anda perlu menyetelnya di kelas turunan juga, Anda juga bisa melindungi penyetel
public string Id { get; protected set; }
Dan terakhir, Anda bisa mendeklarasikan properti sebagai virtual
dan menimpanya dalam kelas turunan, memungkinkan Anda menyediakan implementasi yang berbeda untuk getter dan setter; seperti untuk metode virtual biasa.
Sejak C # 6.0 (Visual Studio 2015, Roslyn) Anda dapat menulis properti otomatis getter saja dengan inline inisialisasi
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Anda juga bisa menginisialisasi properti getter-only dalam konstruktor. Properti otomatis khusus pengambil adalah properti hanya baca yang sebenarnya , tidak seperti properti yang diterapkan secara otomatis dengan penyetel pribadi.
Ini juga berfungsi dengan properti otomatis baca-tulis:
public string Id { get; set; } = "A07";
Mulai dengan C # 6.0 Anda juga dapat menulis properti sebagai anggota bertubuh ekspresi
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Lihat: .NET Compiler Platform ("Roslyn")
Fitur Bahasa Baru di C # 6
Dimulai dengan C # 7.0 , keduanya, pengambil dan penyetel, dapat ditulis dengan badan ekspresi:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Perhatikan bahwa dalam kasus ini penyetel harus berupa ekspresi. Itu tidak bisa menjadi pernyataan. Contoh di atas berfungsi, karena dalam C # sebuah tugas dapat digunakan sebagai ekspresi atau sebagai pernyataan. Nilai ekspresi tugas adalah nilai yang ditetapkan di mana tugas itu sendiri merupakan efek samping. Ini memungkinkan Anda untuk menetapkan nilai ke lebih dari satu variabel sekaligus: x = y = z = 0
setara dengan x = (y = (z = 0))
dan memiliki efek yang sama seperti pernyataan x = 0; y = 0; z = 0;
.
Versi bahasa berikutnya, C # 9.0, mungkin tersedia pada November 2020, akan memungkinkan properti read-only (atau lebih baik menginisialisasi-sekali) yang dapat Anda inisialisasi di object initializer. Saat ini ini tidak dapat dilakukan dengan properti khusus pengambil.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Ia sudah tahu bahwa Anda mencari kunci utama. Sekadar info.