2009-11-03 20 views

cevap

6

Bunu kolayca elde etmek için İfadeleri kullanabilirsiniz. Bkz. blog for a sample.

Bu, bir lambda aracılığıyla bir ifade oluşturabilmenizi ve ismini dışarı çıkarabilmenizi sağlar.

string propertyName = Reflect.GetProperty(() => SomeProperty).Name; 

Viola: başvurulan "yansıtmak" sınıfını kullanarak, eşdeğer haritasına amacıyla

public int MyProperty { 
    get { return myProperty; } 
    set 
    { 
     myProperty = value; 
     RaisePropertyChanged(() => MyProperty); 
    } 
} 

, gibi bir şey yok diye: Örneğin, uygulayan INotifyPropertyChanged gibi bir şey yapmak için tekrar edilebilir - sihirli dizeleri olmayan özellik adları.

+0

Buradaki sözdizimi biraz iğrenç, ama ihtiyacım olan şeyi yapıyor. Teşekkürler! –

1

Yansımayı kullanarak bir nesnenin özelliklerinin bir listesini alabilirsiniz.

MyClass o; 

PropertyInfo[] properties = o.GetType().GetProperties(
    BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance 
); 

Her Mülkiyet size "SomeProperty" alacağı bir adı özniteliği vardır

8

Bu yaklaşım arayabilirsin Şimdi Expression

public static string GetName<T>(this T item) where T : class 
{ 
    if (item == null) 
     return string.Empty; 

    return typeof(T).GetProperties()[0].Name; 
} 

kullanarak daha hızlı şekilde olacaktır:

new { MyClass.SomeProperty }.GetName(); 

Daha fazla performansa ihtiyacınız varsa, değerleri ön belleğe alabilirsiniz. Bu yinelenen soruya bakın: How do you get a variable's name as it was physically typed in its declaration?

+0

En iyi cevap burada. Özelliklerle döngü yapmak istemiyorum, gerçek bir mülke dayalı bir özellik adı almak istiyorum. İsim (adsız) türünü, ilk (yalnızca) özelliği ile kullanmak istediğiniz adın kullanılması dahidir. – Paul

+0

@Paul Arkasındaki deha değilim. İkincisi, çok refactor dostu değil. Yani, mülkün adını değiştirirseniz, anonim tip orijinal adı korur. Bu durumda, "SomeProperty" öğesini "SomeProperty1" olarak değiştirirseniz, anonim sınıf, "SomeProperty1" yerine "SomeProperty1" yazdıracak olan "SomeProperty = SomeProperty1}" şeklinde değişir. Cevapta bundan bahsedeceğim. – nawfal

+0

Darn. Daha önce bir mülk ismini değiştirmeyi beklemiyorum, ama eğer yapsaydım, refactoring'in bunu ele almasını isterdim. Bana bildirdiğiniz için teşekkürler. – Paul

İlgili konular