Не следует ли использовать FieldInfo.SetValue, чтобы установить для ValueType значение NULL?
(относится к PropertyInfo SetValue и нулям)
Если у меня есть public class Thing { public int X; }
, Thing o
и FieldInfo fi
это указывает на X
поле, почему это законно называть fi.SetValue(o, null)
? Среда выполнения устанавливает поле X
в ноль, т.е. default(int)
вместо того, чтобы жаловаться, что ValueType
не может быть установлен на null
,
Кто-нибудь знает выбор дизайна за этим поведением, которое по крайней мере из C# нарушает мой принцип наименьшего удивления?
1 ответ
Текст, содержащийся в поле Исключения для ArgumentException
предполагает, что переданное значение подлежит конвертации, что объясняет, почему это происходит успешно.
Параметр значения не может быть преобразован и сохранен в поле.
Я согласен, что это кажется немного странным, особенно потому, что я обычно ожидаю, что API-интерфейсы отражений будут одними из более жестких и менее прощающих.
Вы можете попробовать связаться с Эриком Липпертом, хотя это скорее вопрос BCL/CLR, а не C#, есть вероятность, что он узнает ответ или узнает кого-то, кто знает. Или это или быть в состоянии дать очень хорошее предположение.