Men "kuchli yozilgan" sehrli satrga ega bo'lishim uchun xususiyat nomini satr sifatida olish yo'lini izlayapman. Men qilishim kerak bo'lgan narsa MyClass.SomeProperty.GetName() kabi "SomeProperty" ni qaytaradi. Bu C# da mumkinmi?
Bunga juda oson erishish uchun Ifodalardan foydalanishingiz mumkin. Namuna uchun bu blogga qarang.
Bu siz lambda orqali ifoda yaratishingiz va nomni chiqarib olishingiz mumkin bo'ladi. Masalan, INotifyPropertyChanged dasturini amalga oshirish quyidagi kabi ishlarni bajarish uchun qayta ishlanishi mumkin:
public int MyProperty {
get { return myProperty; }
set
{
myProperty = value;
RaisePropertyChanged( () => MyProperty );
}
}
O'zingizning ekvivalentingizni xaritada ko'rsatish uchun havola qilingan "Reflect" klassidan foydalanib, siz shunday ishni qilasiz:
Bu erda eng yaxshi javob. Men xususiyatlarni aylantirmoqchi emasman, men haqiqiy xususiyatga asoslangan xususiyat nomini olishni xohlayman. Birinchi (yagona) xususiyat nomini istagan xususiyat bo'lgan anonim turdan foydalanish dahodir.
- personPaul; 12.06.2014
comment
@Paul Men buning ortidagi daho emasman. Ikkinchidan, bu juda yaxshi refaktor emas. Aytmoqchimanki, agar siz mulk nomini o'zgartirsangiz, anonim tur asl nomini saqlab qoladi. Bunday holda, agar siz SomeProperty ni SomeProperty1 ga o'zgartirsangiz, anonim sinf yangilangan SomeProperty1 nomi o'rniga SomeProperty ni chop etadigan new { SomeProperty = SomeProperty1 } ga o'zgaradi. Men buni javobda aytib o'taman.
- personnawfal; 12.06.2014
comment
Darn. Men hech qachon mulk nomini o'zgartirishni kutmayman, lekin agar o'zgartirgan bo'lsam, uni qayta ishlashni xohlayman. Menga xabar berganingiz uchun tashakkur.
- personPaul; 12.06.2014
comment
Agar MyClass bajarilish vaqtida null bo'lsa, bu ham muvaffaqiyatsiz bo'ladi. Ifoda qilish usullari muvaffaqiyatli bo'ladi. Aksariyat hollarda bu muammo tug'dirmaydi, chunki siz boshqa joyda nol mos yozuvlar istisnosini olasiz, lekin buni ta'kidlash kerak.
- personRakuen42; 20.03.2015
comment
@Pedro77 avval kengaytma usulini statik sinfga yozishingiz kerak.
- personnawfal; 09.06.2015