Установите тип Generic (<T>) из свойства

1

Я хочу достичь в соответствии с ниже

// Property
public static T Type
{ get; set; }

private void Form1_Load(...)
{
    List<Type> abc = new ...
    // code.....

Как упоминалось выше, когда я загружаю Form1, List должен быть определен типа = Type (the property). Как я могу это достичь?

  • 0
    используйте универсальный метод для создания вашего списка
  • 0
    Что такое T ? Универсальный параметр класса, который содержит код?
Показать ещё 3 комментария
Теги:
generics
properties

3 ответа

2

Type - это имя свойства, T - имя типа.

List<T> abc = new List<T>();

Я предполагаю, конечно, что вы параметризовали охватывающий класс как class CustomForm<T>

1

Не знаете, почему вы хотите установить это с помощью свойства или, если это вообще возможно, - хотите ли вы изменить тип после создания экземпляра или что-то еще?

Если у вас нет особых особых потребностей, возможно, вы можете просто использовать это?:

private void Form1_Load<T>(...)  // Pass the type in here
{
    List<T> abc = new List<T>(); 
}

Применение:

this.Form1_Load<targetType>(...); 

В качестве альтернативы, передайте тип, когда вы создаете экземпляр класса, содержащего Form1_Load():

class Container<T>
{
    private void Form1_Load(...)
    {
        List<T> abc = new List<T>(); 
    }
}

Применение:

var instance = new Container<targetType>(); 
  • 0
    Я делаю отчеты, используя объекты в качестве источника данных. mindstick.com/Articles/13169999-ef3b-496c-b502-caef973c3bb2/… Теперь я хочу загрузить все отчеты в одной форме Form1 в моем примере. Как вы можете видеть в событии Form1_Load в ссылке, класс Student устанавливается как тип List<> . Теперь предположим, что есть еще один отчет для деталей учителей, и я хочу загрузить его в той же форме. Я сделаю еще один класс для Teachers Details и загружу его в Form1 .
0

Вы можете создать построитель классов следующим образом:

public class GenericBuilder
{
    public Type ParamType { get; set; }

    public object CreateList() {
        var listType = typeof(List<>);

        ArrayList alist = new ArrayList();
        alist.Add( this.ParamType );

        var targetType = listType.MakeGenericType( (Type[])alist.ToArray(typeof(Type)) );

        return Activator.CreateInstance( targetType );
    }
}

и затем вы можете использовать его:

var builder = new GenericBuilder();

builder.ParamType = typeof( int );

var result = builder.CreateList();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню