2013-04-24 66 views
2

我有一个可选参数的构造函数。 我想有一个表达式来调用该构造函数而不提供可选参数(我的意思是让对象使用参数的默认值构造)。如何获取可选参数的默认值?

我在这里读到An expression tree may not contain a call or invocation that uses optional arguments这是不可能的。

我的意思是

var ctorInfo = getIt; 
var f = Expression.Lambda<Func<T>>(Expression.New(ctorInfo)).Compile(); 

失败System.TypeInitializationException

好吧,我会通过默认值。但是,我如何获得参数的默认值?

ctorInfo.GetParameters().Select(?? 

动机:学习目的,没有现实世界的应用。

编辑:,因为它不是在建筑表现,一般有效的情况下也编辑了表达式树标签。

回答

3

根据the documentation for ParameterInfo.RawDefaultValue

ctorInfo.GetParameters().Select(p => p.RawDefaultValue); 

希望它可以帮助

编辑:校正特性,因为:

此属性[默认值]仅用于在执行上下文。在 仅反射上下文中,请改用RawDefaultValue属性。

+0

是的!你知道'DefaultValue'和'RawDefaultValue'之间的区别吗? – nawfal 2013-04-24 07:01:05

+0

不完全。我只是看了一下msdn。不过,我认为'RawDefaultValue'是适合此目的的。 – Sarrus 2013-04-24 07:07:22

+0

好吧,我在这里提出了一个单独的问题http://stackoverflow.com/questions/16185826/difference-between-parameterinfo-defaultvalue-and-parameterinfo-rawdefaultvalue – nawfal 2013-04-24 07:24:36

相关问题