निम्न विधि को देखते हुए:अभिव्यक्तियों का उपयोग करके संपत्ति मूल्य कैसे सेट करें?
public static void SetPropertyValue(object target, string propName, object value)
{
var propInfo = target.GetType().GetProperty(propName,
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
if (propInfo == null)
throw new ArgumentOutOfRangeException("propName", "Property not found on target");
else
propInfo.SetValue(target, value, null);
}
आप लिख यह अभिव्यक्ति लक्ष्य के लिए एक अतिरिक्त पैरामीटर में पारित करने के लिए की जरूरत के बिना सक्षम है बराबर के बारे में कैसे जाना होगा?
यह संपत्ति को सीधे स्थापित करने के बजाय क्यों करें, मैं आपको सुन सकता हूं। उदाहरण के लिए मान लीजिए कि हम एक संपत्ति एक सार्वजनिक गेटर लेकिन निजी सेटर है साथ निम्नलिखित वर्ग है:
public class Customer
{
public string Title {get; private set;}
public string Name {get; set;}
}
मैं चाहते हैं कॉल करने के लिए सक्षम होने के लिए:
var myCustomerInstance = new Customer();
SetPropertyValue<Customer>(cust => myCustomerInstance.Title, "Mr");
अब यहाँ कुछ नमूना कोड है।
public static void SetPropertyValue<T>(Expression<Func<T, Object>> memberLamda , object value)
{
MemberExpression memberSelectorExpression;
var selectorExpression = memberLamda.Body;
var castExpression = selectorExpression as UnaryExpression;
if (castExpression != null)
memberSelectorExpression = castExpression.Operand as MemberExpression;
else
memberSelectorExpression = memberLamda.Body as MemberExpression;
// How do I get the value of myCustomerInstance so that I can invoke SetValue passing it in as a param? Is it possible
}
किसी भी संकेत दिए गए?
आप ऐसा क्यों करना चाहते हैं? अगर संपत्ति का निजी सेटटर है, तो यह ऑब्जेक्ट के बाहर से बदलना नहीं है! जो फ़ंक्शन आप प्रस्तावित कर रहे हैं वह आपके प्रोग्राम के अर्थशास्त्र को तोड़ देता है। –
@VladislavZorov मैं ऐसी टिप्पणी देख रहा था और मैं आपका विचार साझा करता हूं। इस उदाहरण में एक तीसरी पार्टी डीटीओ को यूनिट टेस्ट में प्राथमिकता दी जानी चाहिए और ऐसा करने का यह सबसे आसान तरीका होगा। प्रतिबिंब का भी इसका उपयोग होता है। – Anastasiosyal
संभावित डुप्लिकेट [कैसे एक संपत्ति चयनकर्ता अभिव्यक्ति मूल्य सेट करें>] (http://stackoverflow.com/questions/8107134/how-set-value-a-property-selector-expressionfunct-tresult) http: // stackoverflow.com/questions/5075484/property-selector-expressionfunct-how-to-get-set-value-to-selected-property –
nawfal