Как получить значения по умолчанию для необязательных параметров?

У меня есть конструктор с необязательными параметрами. Я хотел бы иметь выражение для вызова этого конструктора без предоставления необязательных аргументов (я имею в виду, что объект может быть построен со значениями параметров по умолчанию).

Я прочитал здесь Дерево выражения не может содержать вызов или вызов, использующий необязательные аргументы, что это невозможно.

я имею в виду

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

терпит неудачу с System.TypeInitializationException.

Хорошо, я передам значения по умолчанию. Но как мне получить значения параметров по умолчанию?

ctorInfo.GetParameters().Select(??

Мотив: цель обучения, а не практическое применение.

Редактировать: удален тег expression-tree, так как он не используется в контексте построения выражений, а также действителен в целом.


person nawfal    schedule 24.04.2013    source источник


Ответы (1)


Согласно документации для ParameterInfo.RawDefaultValue:

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

Надеюсь, поможет

РЕДАКТИРОВАТЬ: исправлено свойство, потому что:

Это свойство [DefaultValue] используется только в контексте выполнения. В контексте только для отражения вместо этого используйте свойство RawDefaultValue.

person Sarrus    schedule 24.04.2013
comment
Да, это так! Вы знаете разницу между DefaultValue и RawDefaultValue? - person nawfal; 24.04.2013
comment
Не совсем. Я только что посмотрел на msdn. Однако я предполагаю, что RawDefaultValue подходит для этой цели. - person Sarrus; 24.04.2013
comment
Хорошо, я сделал это отдельным вопросом здесь "> stackoverflow.com/questions/16185826/ - person nawfal; 24.04.2013