Не следует ли использовать 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#, есть вероятность, что он узнает ответ или узнает кого-то, кто знает. Или это или быть в состоянии дать очень хорошее предположение.

Другие вопросы по тегам