Lambda ifadesi kullanın
MyClass result = list.Find(x => x.GetId() == "xy");
Not: C #, özellikler için yerleşik bir sözdizimine sahiptir. Alıcı ve ayarlayıcı yöntemleri yazmak yerine (Java'dan alışkın olabileceğiniz gibi),
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
yalnızca set erişimcisinde bilinen bağlamsal bir anahtar sözcüktür. Özelliğe atanan değeri temsil eder.
Bu desen sıklıkla kullanıldığından, C # otomatik uygulanan özellikler sağlar . Yukarıdaki kodun kısa bir versiyonudur; ancak, destek değişkeni gizlidir ve erişilebilir değildir (ancak VB'deki sınıfın içinden erişilebilir).
public string Id { get; set; }
Özellikleri bir alana erişiyormuş gibi kullanabilirsiniz:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Özellikleri kullanarak, listedeki öğeleri şu şekilde ararsınız
MyClass result = list.Find(x => x.Id == "xy");
Salt okunur bir özelliğe ihtiyacınız varsa, otomatik uygulanan özellikleri de kullanabilirsiniz:
public string Id { get; private set; }
Bu Id
, sınıf içinde ayarlamanıza olanak tanır , ancak dışarıdan değil. Bunu türetilmiş sınıflarda da ayarlamanız gerekirse, ayarlayıcıyı da koruyabilirsiniz.
public string Id { get; protected set; }
Ve son olarak, virtual
sınıfları türetmede özellikleri olarak bildirebilir ve onları geçersiz kılabilir, böylece alıcılar ve ayarlayıcılar için farklı uygulamalar sağlamanıza olanak tanır; sıradan sanal yöntemlerde olduğu gibi.
C # 6.0'dan (Visual Studio 2015, Roslyn) bu yana, satır içi başlatıcıyla yalnızca alıcıya özgü otomatik özellikler yazabilirsiniz
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Bunun yerine yapıcı içinde yalnızca alıcı özelliklerini de başlatabilirsiniz. Yalnızca alıcı otomatik özellikleri, özel ayarlayıcıya sahip otomatik uygulanan özelliklerin aksine gerçek salt okunur özelliklerdir.
Bu, okuma-yazma otomatik özellikleriyle de çalışır:
public string Id { get; set; } = "A07";
C # 6.0 ile başlayarak, özellikleri ifade gövdeli üyeler olarak da yazabilirsiniz.
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
Bkz: .NET Derleyici Platformu ("Roslyn")
C # 6'daki Yeni Dil Özellikleri
C # 7.0 ile başlayarak , hem alıcı hem de ayarlayıcı ifade gövdeleri ile yazılabilir:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Bu durumda ayarlayıcının bir ifade olması gerektiğine dikkat edin. Bir ifade olamaz. Yukarıdaki örnek işe yarar, çünkü C # 'da bir atama bir ifade veya bir ifade olarak kullanılabilir. Bir atama ifadesinin değeri, atamanın kendisinin bir yan etki olduğu atanmış değerdir. Bu, aynı anda birden fazla değişkene bir değer atamanıza olanak tanır: x = y = z = 0
eşdeğerdir x = (y = (z = 0))
ve ifadelerle aynı etkiye sahiptir x = 0; y = 0; z = 0;
.
Dilin bir sonraki sürümü olan C # 9.0, muhtemelen Kasım 2020'de kullanıma sunulacak, bir nesne başlatıcıda başlatabileceğiniz salt okunur (veya bir kez daha iyi başlat) özelliklerine izin verecektir. Bu, yalnızca alıcı özellikleriyle şu anda mümkün değildir.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
Birincil anahtarı aradığınızı zaten bilirdi. Sadece bilgi için.