Получение значения статического свойства с InvokeMember - PullRequest
4 голосов
/ 28 февраля 2011

Сбой следующего фрагмента кода:

Необработанное исключение: 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 ]

3 голосов
/ 28 февраля 2011

Example.Value - это поле, а не метод.Используйте это вместо:

var value = typeof(Example).GetField("Value").GetValue(null);
1 голос
/ 28 февраля 2011

Я думаю, что вы ищете 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));
    }
}
0 голосов
/ 28 февраля 2011

Это поле, поэтому вы хотите использовать комбинацию GetField и GetValue против InvokeMember

var value = typeof(Example).GetField("Value", flags).GetValue(null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...