委托财产

时间:2013-10-10 09:55:23

标签: c# properties delegates

我想获得一个属性的set函数的委托。这就是我今天的表现:

var property = typeof(IApplicationState).GetProperty(propertyName);
var action = (Action<IApplicationState, T>)Delegate.CreateDelegate(typeof(Action<IApplicationState, T>), null, property.GetSetMethod());

这有效,但后来我知道该属性的名称。

我可以不使用名字吗?像这样:

var action = (Action<IApplicationState, T>)Delegate.CreateDelegate(typeof(Action<IApplicationState, T>), null, IApplicationState.PROPERTY.GetSetMethod());

1 个答案:

答案 0 :(得分:4)

一个简单的选项确实引入了一个额外的跳(但可能会产生可忽略不计的性能影响)就是使用lambda表达式:

Action<IApplicationState, T> action = (state, value) => state.Foo = value;

目前无法在编译时引用属性,就像引用typeof的类型一样 - 尽管它位于C#团队的功能请求列表中。

编辑:如果这是一个通用方法(类型参数为T),我完全不清楚你是否可以直接使用它,因为state.Foo会可能必须是T类型(或许object)。如果没有更多关于你想要达到的目标的背景,我们就无法真正帮助你。

相关问题