Не следует ли использовать FieldInfo.SetValue, чтобы установить для ValueType значение NULL? - PullRequest
6 голосов
/ 25 августа 2010

(относится к PropertyInfo SetValue и нулям )

Если у меня есть public class Thing { public int X; }, Thing o и FieldInfo fi, которые указывают на поле X, почемузаконно ли звонить fi.SetValue(o, null)?Среда выполнения устанавливает поле X в ноль, т. Е. default(int), вместо того, чтобы жаловаться, что ValueType не может быть установлено в null.

Кто-нибудь знает выбор конструкции, стоящий за этим поведением, что по крайней мереиз C # нарушает мой принцип наименьшего удивления?

1 Ответ

4 голосов
/ 29 августа 2010

Текст, содержащийся в поле «Исключения» для ArgumentException, предполагает, что переданное значение подлежит преобразованию , что объясняет, почему оно успешно выполняется.

Параметр значения не может быть преобразован и сохранен в поле.

Я согласен, что это выглядит немного странно, тем более что я обычно ожидаю, что API-интерфейсы отражения будут одними из более жестких и менее прощающих.

Вы можете попытаться связаться с Эриком Липпертом , хотя это скорее вопрос BCL / CLR, чем C #, есть вероятность, что он узнает ответ или узнает кого-то, кто знает. Либо так, либо вы сможете дать очень хорошее предположение.

...