提问人:Sebastian Good 提问时间:8/25/2010 最后编辑:CommunitySebastian Good 更新时间:6/27/2021 访问量:821
使用 FieldInfo.SetValue 将 ValueType 设置为 null 不应该失败吗?
Shouldn't using FieldInfo.SetValue to set a ValueType to null fail?
问:
(与 PropertyInfo、SetValue 和 null 相关)
如果我有 、 和 a 指向该字段,为什么调用是合法的?运行时将字段设置为零,即 而不是抱怨 a 不能设置为 .public class Thing { public int X; }
Thing o
FieldInfo fi
X
fi.SetValue(o, null)
X
default(int)
ValueType
null
有谁知道这种行为背后的设计选择,至少从 C# 来看,它违反了我的最小惊讶原则?
答:
4赞
Rob
8/29/2010
#1
“例外”框中包含的文本表明传入的值需要转换,这将解释它成功的原因。ArgumentException
value 参数不能转换并存储在字段中。
我确实同意这似乎有点奇怪,特别是因为我通常认为反射 API 是更严格、更不宽容的 API 之一。
您可以尝试联系 Eric Lippert ,虽然这是一个 BCL/CLR 问题而不是 C#,但他有可能知道答案或认识知道答案的人。要么这样,要么能够给出一个很好的猜测。
评论