Domanda

(relative a PropertyInfo SetValue e null )

Se ho public class Thing { public int X; }, un Thing o, e un FieldInfo fi che punti al campo X, perché è legale alla chiamata fi.SetValue(o, null)? Il runtime imposta il campo X a zero, cioè default(int) invece di lamentarsi che un ValueType non può essere impostata null.

Qualcuno sa la scelta progettuale alla base di questo comportamento, che almeno dal C # viola il mio principio del minimo stupore?

È stato utile?

Soluzione

Il testo contenuto nelle eccezioni scatola per ArgumentException suggerisce che il valore passato è soggetto a conversione , il che spiegherebbe perché ci riesce.

  

Il parametro valore non può essere convertito e memorizzato nel campo.

Sono d'accordo che sembra un po 'strano, in particolare per quanto io di solito aspetto che le API di riflessione per essere uno dei perdonare più rigido e meno.

Si potrebbe provare a contattare Eric Lippert , mentre questa è una domanda BCL / CLR piuttosto di C #, c'è una possibilità che dei rigori o conosci qualcuno che lo fa. Uno che o essere in grado di dare una buona congettura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top