1

我想委托一个属性的 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());
4

1 回答 1

4

一个简单的选项确实引入了额外的跃点(但可能对性能的影响可以忽略不计)是只使用 lambda 表达式:

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

目前无法在编译时以与引用类型相同的方式引用属性typeof- 尽管它位于 C# 团队的功能请求列表中。

编辑:如果这是在泛型方法中(类型参数为T),我完全不清楚您是否可以直接使用它,因为state.Foo可能必须是类型T(或object可能)。如果没有更多关于您要实现的目标的背景信息,我们无法在这方面提供真正的帮助。

于 2013-10-10T10:01:03.960 回答