Динамически генерировать свойство в зависимости от типа полученного объекта.

Я хочу создать свойство на основе типа объекта, который достигает ViewModel.

Я сделал следующее.

Создан универсальный класс, в котором генерируется свойство.

public class GenericProperty<T>
        {
            public T Property
            {
                get;
                set;
            }
        }

Я создаю экземпляр класса следующим образом:

Type Tipo = Parameter.GetType();
GenericProperty<Tipo> Test = new GenericProperty<Tipo>();

И теперь возникает проблема: <Tipo> говорит мне:

Тип - переменная , но используется как тип

Как я могу решить проблему?

3
задан 27.11.2019, 10:27
1 ответ

Уже я поместил сходный ответ в Новый List (Of T) Типа, перемещенного за параметр , но существо для VB.net не может считаться дубликатом.

В действительности, тип объекта должен быть известным во времени компиляции (исключая dynamic, у которых есть очень конкретные случаи использования), с которым ответа априори было бы , не возможно .

Однако, есть способ это получать посредством Reflection. Оно было бы чем-либо подобным:

Type tipo = typeof(GenericProperty<>).MakeGenericType(new Type[] { Parameter.GetType() });
var Test = Activator.CreateInstance(tipo);

, Поскольку ты видишь, используют со стороны MakeGenericType :

Заменяет элементы массива типов на параметры типа определения характерного настоящего типа и возвращает объект Type, который представляет сооруженный вытекающий тип.

И позже Activator.CreateInstance, чтобы создавать инстанцию произведенного типа:

Верьте в инстанцию определенного типа используя строитель, который лучше встречается с определенными параметрами.

В любом случае, как это говорил в ответе, соединенном сначала, не точно каков твой случай использования, но я всегда восхвалил бы себя из-за решений, основанных на интерфейсах например, нежели в ресурсах этого типа. Я надеюсь все же, что тебе помогает этот ответ.

2
ответ дан 01.12.2019, 10:46
  • 1
    Ответ гениален, но то, что я не заканчиваю понимать, как hacié ndolo así возможно соглашаться на свойство " Property" tipada с типом Param. – Diego 27.11.2019, 14:48
  • 2
    @Diego не, если я понимаю твой вопрос. Переменная Test однажды instanciada используя CreateInstance действительно желанного типа (GenericProperty<T>) точно, равно как если ты делал например GenericProperty<string> Test = new GenericProperty<string>(). Почему ты не собирался иметь доступ к Property? – Pikoh♦ 27.11.2019, 16:30

Теги

Похожие вопросы