2013-04-24 63 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