Невозможно уменьшить и создать пользовательские объекты - PullRequest
0 голосов
/ 28 апреля 2020

Я не могу
(1) проверить, относится ли пользовательский объект к определенному типу, и
(2) создать экземпляр "заброшенного" объекта

У меня есть:

public class MyObject<Type> // --> i require this "<Type>" form somewhere else, so not possible to change it
{
    public string A { get; set; }
    public string B { get; set; }
}

public class MyClass : MyBaseClass
{
    public MyObject<string> Prop1 { get; set; }
    public MyObject<int> Prop2 { get; set; }
    public MyObject<long> Prop3 { get; set; }
}

public class MyBaseClass
{
    ....

    PropertyInfo[] props = this.GetType().GetProperties();
    foreach (PropertyInfo prop in props) 
    {
       if(prop.PropertyType is MyObject<Type>) // --> (1) this does not work
       {
          var o = (MyObject<Type>)Activator.CreateInstance(prop.PropertyType); // (2) this does not work
          o.A = "test1";
          o.B = "test2";
          prop?.SetValue(this, o);
       }
    }

    ....        
}

Чего я в основном хочу добиться, так это динамически установить свойства A и B объекта MyObject, в соответствии с которым объявлен тип. Поэтому мне нужно использовать Reflection для обнаружения свойств и типов, создания экземпляров и установки свойств.

Кто-нибудь может помочь мне с этими проблемами?

Заранее спасибо,

1 Ответ

0 голосов
/ 28 апреля 2020

Надеюсь, я правильно понял:

Для проверки, является ли свойство вашего универсального c типа (!): Сделайте это так, как здесь Проверка, если объект универсального c типа в C#

Для активации экземпляра: используйте Activator.CreateInstance (prop.PropertyType)

...