相关疑难解决方法(0)

创建属性setter委托

我创建了将属性lambda转换为委托的方法:

public static Delegate MakeGetter<T>(Expression<Func<T>> propertyLambda)
{
    var result = Expression.Lambda(propertyLambda.Body).Compile();
    return result;
}

public static Delegate MakeSetter<T>(Expression<Action<T>> propertyLambda)
{
    var result = Expression.Lambda(propertyLambda.Body).Compile();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这些工作:

Delegate getter = MakeGetter(() => SomeClass.SomeProperty);
object o = getter.DynamicInvoke();

Delegate getter = MakeGetter(() => someObject.SomeProperty);
object o = getter.DynamicInvoke();
Run Code Online (Sandbox Code Playgroud)

但这些不会编译:

Delegate setter = MakeSetter(() => SomeClass.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});

Delegate setter = MakeSetter(() => someObject.SomeProperty);
setter.DynamicInvoke(new object[]{propValue});
Run Code Online (Sandbox Code Playgroud)

MakeSetter行失败,"无法根据用法推断出类型参数.请尝试明确指定类型参数."

我正在尝试做什么?提前致谢.

c# lambda delegates properties

36
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×1

delegates ×1

lambda ×1

properties ×1