2010-08-25 3 views
6

(связанные с PropertyInfo SetValue and nulls)Не следует использовать FieldInfo.SetValue для установки значения ValueType на null?

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

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

+0

Согласен, он должен вызывать исключение ArgumentException, по крайней мере, по документам. – leppie

+0

Это неприятное поведение для API Reflection – Doug

ответ

4

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^