(मेरे द्वारा स्वीकृत उत्तर का उपयोग करके नीचे दिए गए समाधान देखें)
मैं प्रतिबिंब को शामिल करने वाले कुछ कोड की स्थिरता को बेहतर बनाने की कोशिश कर रहा हूं। ऐप में .NET रीमोटिंग इंटरफ़ेस एक्सपोज़िंग (अन्य बातों के अलावा) है जो ऐप के भागों को एक्सेस करने के लिए एक्सक्यूट नामक एक विधि है जो इसके प्रकाशित रिमोट इंटरफ़ेस में शामिल नहीं है।
यहां बताया गया है कि ऐप किस प्रकार संपत्तियों को नामित करता है (इस उदाहरण में एक स्थिर) जो कि एक्सेक्यूट के माध्यम से सुलभ होना है:
RemoteMgr.ExposeProperty("SomeSecret", typeof(SomeClass), "SomeProperty");
इसलिए एक दूरस्थ उपयोगकर्ता कॉल कर सकता है:
string response = remoteObject.Execute("SomeSecret");
और ऐप SomeClass.SomeProperty को खोजने के लिए प्रतिबिंब का उपयोग करेगा और एक स्ट्रिंग के रूप में इसके मूल्य को वापस करेगा।
दुर्भाग्यवश, यदि कोई व्यक्ति कुछProProperty का नाम बदल देता है और ExposeProperty () के 3 parm को बदलना भूल जाता है, तो यह इस तंत्र को तोड़ देता है।
मुझे इसके बराबर की आवश्यकता है:
SomeClass.SomeProperty.GetTheNameOfThisPropertyAsAString()
ExposeProperty में 3rd parm के रूप में उपयोग करने के लिए इसलिए रीफैक्टरिंग उपकरण नाम बदलने का ध्यान रखेंगे।
क्या इसे करने का कोई तरीका है? अग्रिम में धन्यवाद।
ठीक है, यहाँ मैंने क्या बनाया है (मेरे द्वारा चुने गए उत्तर और उसके द्वारा संदर्भित प्रश्न के आधार पर):
// <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;
}
उपयोग:
// Static Property
string name = GetPropertyName(() => SomeClass.SomeProperty);
// Instance Property
string name = GetPropertyName(() => someObject.SomeProperty);
अब इस शांत क्षमता के साथ, एक्सपोज़प्रोपर्टी विधि को सरल बनाने का समय है। खतरनाक कामों को चमकाने का काम ...
सबको धन्यवाद।