GetValue
类上的GetConstantValue
,GetRawConstantValue
和PropertyInfo
方法之间有什么区别?遗憾的是,MSDN文档在这个问题上并不十分清楚。
答案 0 :(得分:15)
GetConstantValue
和GetRawConstantValue
都适用于文字(在字段的情况下考虑const
,但语义它不仅适用于文字字段) - 与GetValue
不同,它会在运行时获得某些内容的实际值,常量值(通过GetConstantValue
或GetRawConstantValue
)不依赖于运行时 - 它直接来自元数据。
然后我们了解GetConstantValue
和GetRawConstantValue
之间的区别。基本上,后者是更直接和原始的形式。这主要表示enum
成员;例如 - 如果我有:
enum Foo { A = 1, B = 2 }
...
const Foo SomeValue = Foo.B;
然后GetConstantValue
的{{1}}为SomeValue
;但是,Foo.B
的{{1}}为GetRawConstantValue
。特别是,如果您使用的是仅反射上下文,则无法使用SomeValue
,因为这需要装箱将值2
,您不能在使用仅反射时执行。
答案 1 :(得分:0)
我不知道你要做什么。无论如何,如果您只想使用反射检索属性的值,则必须使用GetValue。即像这样的东西:
private string _foo = "fooValue";
public string Foo
{
get { return _foo; }
set { _foo = value; }
}
public void Test()
{
PropertyInfo pi = this.GetType().GetProperty("Foo");
string v = (string)pi.GetValue(this, null);
}
请注意,如果在此示例中调用GetConstantValue或GetRawConstantValue,则会出现InvalidOperationexception,因为该属性不是常量。
Marc完全解释了GetConstantValue和GetRawConstantValue之间的区别。