Questa è una domanda di follow-up di How do I get default values of optional parameters?Differenza tra ParameterInfo.DefaultValue e ParameterInfo.RawDefaultValue
Da documentation, DefaultValue:
Ottiene un valore che indica il valore di default se il parametro ha un valore di default .
Questa proprietà viene utilizzata solo nel contesto di esecuzione. Nel contesto di sola riflessione , utilizzare invece la proprietà RawDefaultValue.
Il valore predefinito viene utilizzato quando un valore effettivo non è specificato nella chiamata al metodo . Un parametro può avere un valore predefinito null. Questo è diverso dal caso in cui un valore predefinito non è definito.
Da documentation, RawDefaultValue:
Ottiene un valore che indica il valore di default se il parametro ha un valore di default .
Questa proprietà può essere utilizzata sia nel contesto di esecuzione che nel contesto di sola riflessione.
Il valore predefinito viene utilizzato quando un valore effettivo non è specificato nella chiamata al metodo . Un parametro può avere un valore predefinito null. Questo è diverso dal caso in cui un valore predefinito non è definito.
La documentazione è così simile tranne che per il contesto di riflessione e altro no. Che differenza è? Quando mai DefaultValue
viene utilizzato senza alcuna riflessione? Voglio dire come otteniamo un valore predefinito senza riflessione? Mi sto perdendo qualcosa?
Aggiornamento
ho creato due overload come questo:
public void Required(string value)
{
}
public void Optional(string value = "", int i = -1)
{
}
ho provato con:
var f = requiredInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var g = requiredInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();
var h = optionalInfo.GetParameters().Select(p => p.DefaultValue).ToArray();
var i = optionalInfo.GetParameters().Select(p => p.RawDefaultValue).ToArray();
//f equals g and h equals i in every way!
Allora, qual è la differenza, dato che i miei spettacoli di prova (tutto in riflessione contesto) nessuna differenza?
Forse quel collegamento ti aiuterà con il contesto di sola riflessione: http://msdn.microsoft.com/en-us/library/ms172331.aspx – rpeshkov