使用 InvokeMember 检索静态属性值

发布于 2024-10-19 15:02:38 字数 638 浏览 3 评论 0原文

以下代码段失败并显示:

未处理的异常: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";
    }
}

The following piece of code fails with:

Unhandled Exception: System.MissingMethodException: Method 'TestApp.Example.Value' not found.

I also tried changing BindingFlags.Static into BindingFlags.Instance and passing an actual instance as the fourth parameter but with the same results.
Is there any way I can fix this?

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";
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

双马尾 2024-10-26 15:02:38

Example.Value 是一个字段,而不是一个方法。使用这个代替:

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

Example.Value is a field, not a method. Use this instead:

var value = typeof(Example).GetField("Value").GetValue(null);
铁轨上的流浪者 2024-10-26 15:02:38

我认为您正在寻找 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));
    }
}

I think you are looking for FieldInfo, example on 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));
    }
}
老娘不死你永远是小三 2024-10-26 15:02:38

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

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

This is a field so you want to use a combination of GetField and GetValue vs. InvokeMember

var value = typeof(Example).GetField("Value", flags).GetValue(null);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文