c# - 从属性 getter 或 setter 方法创建委托(delegate)

标签 c# properties delegates

要从方法创建委托(delegate),您可以使用编译类型安全语法:

private int Method() { ... }

// and create the delegate to Method...
Func<int> d = Method;

属性是 getter 和 setter 方法的包装器,我想创建一个属性 getter 方法的委托(delegate)。有点像

public int Prop { get; set; }

Func<int> d = Prop;
// or...
Func<int> d = Prop_get;

不幸的是,这不起作用。我必须创建一个单独的 lambda 方法,当 getter 方法无论如何都与委托(delegate)签名匹配时,这似乎是不必要的:

Func<int> d = () => Prop;

为了直接使用委托(delegate)方法,我不得不使用讨厌的反射,它不是编译类型安全的:

// something like this, not tested...
MethodInfo m = GetType().GetProperty("Prop").GetGetMethod();
Func<int> d = (Func<int>)Delegate.CreateDelegate(typeof(Func<int>), m);

有没有什么方法可以直接以编译安全的方式在属性获取方法上创建委托(delegate),类似于在顶部的普通方法上创建委托(delegate),而无需使用中间 lambda 方法?

最佳答案

据我所知,您已经记下了所有“有效”变体。由于无法在普通代码中显式处理 getter 或 setter(即没有反射),我认为没有办法做你想做的事。

关于c# - 从属性 getter 或 setter 方法创建委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2621488/

相关文章:

ios - 通过委托(delegate)将数据传递给 UITableView

c# - LambdaExpression.Compile 和 Delegate.CreateDelegate 之间的区别

c# - 来自 SelectionChanged 事件 WinRT 的 ArgumentOutOfRangeException

java - 为什么在类路径中(在 WEB-INF/lib 下)我无法使用 getResourceAsStream 读取属性文件

MSBuild 验证属性

Java 属性 : . 属性文件与 xml?

foreach - 如何让 foreach 对委托(delegate)使用非引用类型?

c# - 无法验证装配数据;加载此程序集时必须提供授权 key

c# - 列表框中的项目溢出

c# - 添加/编辑记录的 ASP.NET MVC View 模式