Можно ли использовать универсальные формы в C#?

Необходимо создать универсальную форму:

public partial class MyGenericForm<T> :
    Form where T : class
{
    /* form code */
    public List<T> TypedList { get; set; }
}

Является допустимым C# и компилируется. Однако конструктор не будет работать, и форма выдаст исключение среды выполнения, если у вас есть какие-либо изображения, указывающие, что она не может найти ресурс.

Я думаю, это связано с тем, что конструктор windows forms предполагает, что ресурсы будут храниться под именем простого типа.

2 ответа

  1. У меня есть хак, чтобы обойти это, что работает, но не идеально:

    Добавьте новый класс в проект, который наследует форму с простым именем.

    internal class MyGenericForm:
        MyGenericForm<object> { }
    

    Это означает, что хотя конструктор все еще ошибается, ожидаемый простой тип (i.e без<>) все еще находится.