6

(与PropertyInfo SetValue 和 nulls相关)

如果我有指向该字段的public class Thing { public int X; }、 aThing o和 a ,为什么调用 是合法的?运行时将该字段设置为零,而不是抱怨 a不能设置为。FieldInfo fiXfi.SetValue(o, null)Xdefault(int)ValueTypenull

有谁知道这种行为背后的设计选择,至少从 C# 来看,这违反了我最不惊讶的原则?

4

1 回答 1

4

Exceptions 框中包含的文本ArgumentException表明传入的值是要进行转换的,这可以解释为什么它会成功。

value 参数不能转换并存储在字段中。

我确实同意这似乎有点奇怪,特别是因为我通常认为反射 API 是更严格和更不宽容的 API 之一。

您可以尝试联系Eric Lippert,虽然这是一个 BCL/CLR 问题而不是 C#,但他有可能知道答案或知道有人知道。要么,要么能够给出一个很好的猜测。

于 2010-08-29T09:36:25.167 回答