gpt4 book ai didi

c# - 返回委托(delegate)的 Lambda 表达式

转载 作者:太空狗 更新时间:2023-10-29 21:35:11 27 4
gpt4 key购买 nike

您好,我正在努力实现这样的目标;

Method<TObjectType>(m=>m.GetData); //m is the instance of TObjectType

如果我能成功,那么我就可以访问这个表达式并获取 GetData 方法并将其用于创建动态 sql 查询。我可以通过将方法名称作为字符串来实现,但是我不想破坏我的开发人员 friend 的强类型世界。

我知道我必须给出委托(delegate)的确切定义,但这仍然对我没有帮助;

void Method<TObjectType>(Expression<Func<TObjectType, Delegate>> ex){/**/}

你有什么想法吗?

最佳答案

不幸的是,几乎没有“委托(delegate)”这样的东西。对于大多数用途(特别是:解析 MethodInfo),它必须是强类型委托(delegate)。这是因为 GetData 不是一个方法,它是一个方法组。您确实需要精确指定方法,或者具有已知的委托(delegate)类型(最终做同样的事情)。

您有两个实用的选择;致力于 object,或添加一个泛型。例如:

void Method<TObjectType>(Expression<Func<TObjectType,object>> ex) {...}

会工作,因为:

void Method<TObjectType, TValue>(Expression<Func<TObjectType,TValue>> ex) {...}

调用者会使用:

Method<Foo>(x => x.GetData());

如果您真的想要使用委托(delegate),则类型必须是可预测的,例如:

void Method<TObjectType>(Expression<Func<TObjectType,Func<int>>> ex)

允许:

Method<Foo>(x => x.GetData);

或者,如果您知道(例如)方法总是无参数的,但不知道返回类型;也许是这样的:

void Method<TObjectType, TValue>(Expression<Func<TObjectType,Func<TValue>>> ex)

允许:

Method<Foo, int>(x => x.GetData);

关于c# - 返回委托(delegate)的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11735043/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com