Отражение GetField() не работает из GetType(), только typeof(T) [дубликат]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отражение GetField() не работает из GetType(), только typeof(T) [дубликат]

Сообщение Anonymous »

Я столкнулся с каким-то странным поведением с отражением. Похоже на ошибку.
Я использовал отражение в своем проекте C# для доступа к общедоступным полям в различных пользовательских типах данных. Я использовал mono для запуска своего кода на Mac, но впервые я создал собственный автономный проект, используя «dotnetPublish -r osx-x64 -c Release --self-contained -p:PublishAot=true ". Все работает правильно, кроме GetField/GetFields.
Например, класс в моем проекте имеет общедоступную строку с именем name. Допустим, этот класс называется бытие.

Код: Выделить всё

//o is of type object which is an instance of being
o.GetType().GetField("name").SetValue(o, "somevalue");
Приведенная выше строка завершается сбоем, поскольку ссылка на объект не установлена ​​на экземпляр объекта, поскольку GetField("name") возвращает значение null. Точно так же GetFields() возвращает пустой массив, хотя у меня есть десятки общедоступных полей.
Причина, по которой мне это кажется ошибкой, заключается в том, что это будет работать, если я получу доступ к состоянию сначала таким образом:

Код: Выделить всё

var field = typeof(being).GetField("name");
Мне даже не нужно ничего ДЕЛАТЬ с полем. Простой вызов GetField() для typeof(being) заставит GetType() из моего экземпляра внезапно начать возвращать поля. ХМ? Как это возможно, если строка выше вообще не задействована?
Мне нужен обходной путь, независимо от того, ошибка это или нет. В некоторых случаях я не знаю тип во время компиляции, поэтому не могу выполнить typeof(being), typeof(monster) и т. д. Мне приходится полагаться на GetType().
Заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/779 ... ly-typeoft
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Прочная функция, проблема GetType() и Type.GetType()
    Anonymous » » в форуме C#
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Можно ли запустить статический метод с помощью функции getType в C#?
    Anonymous » » в форуме C#
    0 Ответы
    52 Просмотры
    Последнее сообщение Anonymous
  • Избегайте указания имени пространства имен в Type.GetType().
    Anonymous » » в форуме C#
    0 Ответы
    45 Просмотры
    Последнее сообщение Anonymous
  • Почему компилятор C# выдает инструкцию callvirt для вызова метода GetType()?
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Компиляция кода во время выполнения, загрузка в текущий домен приложения, но Type.GetType не видит его.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»