使用InvokeMember检索静态属性值

时间:2011-02-28 17:50:33

标签: c# reflection

以下代码失败:

  

未处理的异常:System.MissingMethodException:找不到方法'TestApp.Example.Value'。

我还尝试将BindingFlags.Static更改为BindingFlags.Instance并将实际实例作为第四个参数传递,但结果相同。 有什么方法可以解决这个问题吗?

using System.Reflection;

namespace TestApp {
    class Program {
        static void Main() {
            var flags = BindingFlags.GetProperty | BindingFlags.Static | BindingFlags.Public;
            var value = typeof(Example).InvokeMember("Value", flags, null, null, null);
        }
    }

    public sealed class Example {
        public static readonly string Value = "value";
    }
}

3 个答案:

答案 0 :(得分:3)

Example.Value是一个字段,而不是一个方法。请改用:

var value = typeof(Example).GetField("Value").GetValue(null);

答案 1 :(得分:1)

我认为您正在寻找FieldInfo,例如msdn

class MyClass
{
    public static String val = "test";
    public static void Main()
    {
        FieldInfo myf = typeof(MyClass).GetField("val");
        Console.WriteLine(myf.GetValue(null));
        val = "hi";
        Console.WriteLine(myf.GetValue(null));
    }
}

答案 2 :(得分:0)

这是一个字段,因此您要使用GetFieldGetValueInvokeMember的组合

var value = typeof(Example).GetField("Value", flags).GetValue(null);