7 votes

L'utilisation de FieldInfo.SetValue pour définir un ValueType à null ne devrait-elle pas échouer ?

(en rapport avec PropertyInfo SetValue et nullités )

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

Quelqu'un connaît-il le choix de conception derrière ce comportement, qui, du moins en C#, viole mon principe de moindre étonnement ?

4voto

Rob Points 24505

Le texte contenu dans la case Exceptions pour ArgumentException suggère que la valeur transmise est soumise à conversion ce qui expliquerait son succès.

Le paramètre de valeur ne peut pas être converti et enregistré dans le champ.

Je suis d'accord pour dire que cela semble un peu étrange, d'autant plus que je m'attends généralement à ce que les API de réflexion soient parmi les plus rigides et les moins tolérantes.

Vous pouvez essayer de contacter Eric Lippert Bien qu'il s'agisse d'une question sur BCL/CLR plutôt que sur C#, il y a des chances qu'il connaisse la réponse ou qu'il connaisse quelqu'un qui la connaisse. Soit cela, soit il sera en mesure de donner une très bonne estimation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X