2014-09-16 1 views
1

Я создаю динамический тип во время выполнения (см. Здесь: Serialize/Deserialize a dynamic object) и используйте этот тип для создания динамического члена в другом классе.PropertyInfo на динамическом объекте System.Object не то, что нужно

public class SomeClass 
    { 
     private dynamic _AnimalType = CreateAnimal<Animal>("Dog"); 
     public dynamic AnimalType { get { return _AnimalType; } } 

     static internal PropertyInfo[] Sprops = typeof(SomeClass).GetProperties(); 
     static public PropertyInfo[] getPropertyInfos() { get { return Sprops; } } 
    } 

Однако, когда следующее называется:

 PropertyInfo[] Sprops = typeof(SomeClass).GetProperties(); 

Sprops содержит один PropertyInfo (System.Object), который 'exptected', но не то, что 'хотел'. Я хотел бы получить Type, который AnimalType в настоящее время (Animal, или, точнее, Dog). Есть ли способ сделать это? Я не хочу создавать экземпляр этого класса, а затем вызывать метод «SetInternalProperties». Идея состоит в том, чтобы свойства были легко доступны как статические.

+0

* Я получаю свойство System.Object * что это значит? Где вы получаете 'System.Object'? Просьба уточнить. –

+0

Уточненный выше: Sprops содержит один PropertyInfo ('System.Object') – Tizz

ответ

1

Да, PropertyInfo не может получить тип времени выполнения. Все, что он делает, это получение вами типа свойства, которое объявлено.

Значит, должно быть что-то dynamic не так ли? Почему вы получили System.Object?

Хорошо, динамично только System.Object под обложками, украшенными System.Runtime.CompilerServices.DynamicAttribute. Вот почему вы просто видите System.Object. Невозможно получить информацию о времени выполнения (без экземпляра).

Есть ли способ сделать это?: Если вы можете объяснить, что вы пытаетесь достичь, вы можете получить лучший ответ.

Если у вас есть экземпляр SomeClass, вы можете найти, что такое тип выполнения.

SomeClass instance = new SomeClass();// get instance somehow 
PropertyInfo pi = ...;//Get the property info 
Type dynamicType = pi.GetValue(instance).GetType(); 
+0

Да, имеет смысл, что вы сказали, и я точно знаю, почему я получаю System.Object вместо того типа, который я хочу. Может быть, мне нужно пойти по этому поводу по-другому. Ive уточнил немного больше. Надеюсь, это поможет объяснить, что я пытаюсь сделать. – Tizz

+0

@Tizz Я обновил свой ответ, чтобы показать, как получить эту информацию из экземпляра 'SomeClass'. Без примера, вы не можете найти его по понятным причинам (потому что вы можете хранить все в режиме исполнения в отдельных экземплярах). –

+0

Спасибо, что помогает. В текущем коде используется PropertyInfo [], чтобы сделать кучу вещей, и я пытаюсь подгонять мое решение. Мне нравится, что я могу получить динамический тип, но мне действительно нужен PropertyInfo этого типа. Можете ли вы продолжать помогать дальше? – Tizz

 Смежные вопросы

  • Нет связанных вопросов^_^