(Kabul ettiğim yanıtı kullanarak oluşturduğum aşağıdaki çözüme bakın)
Yansıma içeren bazı kodların sürdürülebilirliğini artırmak için çalışıyorum. Uygulama, yayınlanan uzak arabiriminde bulunmayan uygulama bölümlerine erişmek için Execute adlı bir yöntemi (diğer şeylerin yanı sıra) ortaya çıkaran bir .NET Remoting arabirimine sahiptir.
Uygulamanın Execute aracılığıyla erişilebilir olması gereken özellikleri (bu örnekte statik olan) nasıl belirlediği aşağıda açıklanmıştır:
RemoteMgr.ExposeProperty("SomeSecret", typeof(SomeClass), "SomeProperty");
Böylece uzaktaki bir kullanıcı arayabilir:
string response = remoteObject.Execute("SomeSecret");
ve uygulama SomeClass.SomeProperty'yi bulmak ve değerini bir dize olarak döndürmek için yansımayı kullanır.
Ne yazık ki, birisi SomeProperty olarak yeniden adlandırır ve ExposeProperty () öğesinin 3. parm değerini değiştirmeyi unutursa, bu mekanizmayı bozar.
Ben eşdeğer gerekir:
SomeClass.SomeProperty.GetTheNameOfThisPropertyAsAString()
ExposeProperty'de 3. parm olarak kullanmak için yeniden düzenleme araçları yeniden adlandırmalarla ilgilenir.
Bunu yapmanın bir yolu var mı? Şimdiden teşekkürler.
Tamam, oluşturduğum şey (seçtiğim cevaba ve referans aldığı soruya dayanarak):
// <summary>
// Get the name of a static or instance property from a property access lambda.
// </summary>
// <typeparam name="T">Type of the property</typeparam>
// <param name="propertyLambda">lambda expression of the form: '() => Class.Property' or '() => object.Property'</param>
// <returns>The name of the property</returns>
public string GetPropertyName<T>(Expression<Func<T>> propertyLambda)
{
var me = propertyLambda.Body as MemberExpression;
if (me == null)
{
throw new ArgumentException("You must pass a lambda of the form: '() => Class.Property' or '() => object.Property'");
}
return me.Member.Name;
}
Kullanımı:
// Static Property
string name = GetPropertyName(() => SomeClass.SomeProperty);
// Instance Property
string name = GetPropertyName(() => someObject.SomeProperty);
Şimdi bu harika özellik ile, ExposeProperty yöntemini basitleştirmenin zamanı geldi. Kapı tokmağını parlatmak tehlikeli bir iştir ...
Herkese teşekkürler.