c# - 我怎样才能获得对属性 setter 的引用?

标签 c# .net asp.net

我有一些 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/

相关文章:

c# - 通过 C# 确定本地组的成员

c# - 禁用 "Name can be simplified"IDE0003 修复提示

asp.net - 如何从代码后面获取 html 页面的呈现源代码,以便我可以通过邮件发送它

c# - 创建应用程序的 Hook ?

c# - 最接近 0.5 的舍入

c# - Visual Studio 在 vctmp 文件中显示警告

c# system.drawing 计算 1 个字符的字体大小以填充方形图像

c# - 建议 .NET 上的简单 ORM - 用于维护遗留应用程序的设计

c# - 在 Asp.net 中显示括号

c# - tinyMCE 下拉菜单与 'add hyperlink' 模态断开连接