Non dovrebbe utilizzare FieldInfo.SetValue per impostare un ValueType su null fallire?
-
01-10-2019 - |
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?
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.