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