【发布时间】:2013-07-24 14:29:27
【问题描述】:
假设我已将 Func 定义如下:
Func<MyClass, object> f = o => o.StringProperty;
或
Func<MyClass, object> f = o => o.Property.SomeMethod();
有没有办法在不专门调用的情况下获得 实际 返回类型?
【问题讨论】:
-
“获取”返回类型究竟如何?一个假设的例子?
-
@Jon 我认为根据编译器知道这一点的事实推断返回类型(第一个示例中为
string,第二个示例中返回SomeMethod),但是此示例在运行时会崩溃-time 作为变量f可以重新分配。假设,如果无法重新分配f,您可以通过解析Func定义来静态确定返回类型。听起来像是罗斯林的候选人;-) -
根据您的使用情况,也许您可以利用
ExpressionAPI 来检查返回类型:stackoverflow.com/questions/671968/…(这不是您想要做的确切实现,只是一个相关示例) -
如果你有类似
Func<MyClass, object> f1 = o => o.StringProperty; Func<MyClass, object> f2 = o => f1(o);的东西,“实际”返回类型是什么?甚至Func<MyClass, object> f = o => { throw new NotImplementedException(); };? :) -
@hvd 在抛出异常的情况下这是一个很好的问题
标签: c# reflection lambda expression