Question

(lié à PropertyInfo SetValue et nulls )

Si je public class Thing { public int X; }, un Thing o et un FieldInfo fi qui pointe vers le champ X, pourquoi est-il légal d'appel fi.SetValue(o, null)? Le temps d'exécution définit le X champ à zéro, à savoir default(int) au lieu de se plaindre qu'un ValueType ne peut pas être réglé sur null.

Quelqu'un sait-il le choix de conception derrière ce comportement, qui, au moins de C # viole mon principe de moindre étonnement?

Était-ce utile?

La solution

Le texte contenu dans les exceptions boîte pour ArgumentException suggère que la valeur transmise est soumise à conversion , ce qui expliquerait pourquoi il réussit.

  

Le paramètre de valeur ne peut pas être convertie et stockée dans le champ.

Je suis d'accord qu'il semble un peu étrange, d'autant plus que je pense généralement les API de réflexion pour être l'un des plus rigides et moins indulgents.

Vous pouvez essayer Eric Lippert , tout cela est une question BCL / CLR plutôt que C #, il y a une chance qu'il va connaître la personne de réponse ou savoir qui le fait. Ça ou être en mesure de donner une très bonne estimation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top