Seb*_*ood 6 .net clr least-astonishment
(与PropertyInfo SetValue和nulls相关)
如果我有public class Thing { public int X; },a Thing o和a FieldInfo fi指向该X字段,为什么打电话合法fi.SetValue(o, null)?运行时将字段X设置为零,即default(int)不是抱怨a ValueType不能设置为null.
有没有人知道这种行为背后的设计选择,至少从C#中违背了我最不惊讶的原则?
Exceptions 框中包含的文本ArgumentException表明传入的值需要进行conversion,这可以解释为什么它会成功。
value 参数无法转换并存储在字段中。
我确实同意这看起来有点奇怪,特别是因为我通常期望反射 API 是更严格和更不宽容的 API 之一。
您可以尝试联系Eric Lippert,虽然这是一个 BCL/CLR 问题而不是 C# 问题,但他有可能知道答案或认识知道答案的人。要么能够给出很好的猜测。