KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Given the following method: 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); } How would you go about writing it's expression enabled equivalent without needing to pass in an extra parameter for target? Why do this instead of setting the property directly I can hear you say. For example suppose we have the following class with a property that has a public getter but private setter: public class Customer { public string Title {get; private set;} public string Name {get; set;} } I would like to be able to call: var myCustomerInstance = new Customer(); SetPropertyValue<Customer>(cust => myCustomerInstance.Title, "Mr"); Now here is some sample code. 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 } Any pointers?
Tags (comma-separated)
Save Edits
Cancel