我有一些 asp.net 代码使用已发布表单中的值填充 LINQ to SQL 对象(所有字符串字段)中的字段:
userSelections.A = Request.Form["A"];
userSelections.B = Request.Form["B"];
userSelections.C = Request.Form["C"];
userSelections.D = Request.Form["D"];
我想将表单字段的名称和关联的 setter 对象存储在一个表中,这样我就可以遍历整个集合,而不必编写一堆重复的代码。
有没有办法让委托(delegate)给属性 setter ?即,假设我有类 myClass,具有字符串属性 myProperty。我可以得到一个委托(delegate),比如 void myPropertySetterDelegate(string val, MyClass this),它可以与类的任何实例一起使用吗?
我知道这可以通过反射来完成,但我项目中的其他开发人员有性能问题,所以如果可能的话我更喜欢非反射解决方案。
谢谢!
最佳答案
您可以使用 lambda:
Action<MyClass, string> myPropertySetter = (mc, s) => mc.MyProperty = s;
你有一个 MyClass
的实例:
MyClass something = repo.GetMyClass();
myPropertySetter(something, valueFromSomewhere);
现在,按照你的例子:
Dictionary<string, Action<MyClass, string>> setters = new Dictionary<string, Action<MyClass, string>>();
setters.Add("A", Action<MyClass, string> myPropertySetter = (mc, s) => mc.A = s);
[...]
后来:
MyClass something = getFromSomewhere();
foreach (string key in Request.Form.Keys)
{
setters[key](something, Request.Form[key]);
}
关于c# - 我怎样才能获得对属性 setter 的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643076/