Если Вы хотите именно "
при создании экземпляра класса в поле можно было записать List любого типа", то generic тип должен быть определен на стадии компиляции и если Вы явно не указали его тип, то компилятор пытается найти класс T в текущем пространстве имен, а его у Вас нет, от сюда и ошибка.
Если нужно внутри класса использовать generic поле, то и класс Вы должны определить тем же типом.
public partial class AddForm<T> : Form where T: class
{
public string itemToAdd { get; set; }
public List<T> list { get; set; }
public AddForm()
{
InitializeComponent();
}
}
И при создании экземпляра формы указать
var form = new AddForm<Album>()
В этом случае поле List будет типизированно типом Album.
Если же список внутри формы небольшой и можно пренебречь затратами на приведение типов, то можно сделать список типа object.
public partial class AddForm : Form
{
public string itemToAdd { get; set; }
public List<object> list { get; set; }
public AddForm()
{
InitializeComponent();
}
}
А доставать от туда по типу можно многими способами, например, если знаете заранее какой там тип то сделать привидение
var albums = form.list.Cast<Album>();
Если нет - то сделать фильтрацию по типу
var albums = form.list.OfType<Album>();
var photos = form.list.OfType<Photo>();