Конечно - просто создайте список, используя базовый тип в качестве аргумента универсального типа:
List<Control> controls = new List<Control>();
controls.Add(new TextBox());
controls.Add(new Label());
controls.Add(new Button());
// etc
Обратите внимание, что при повторном получении элементов вы будете «знать» только о них как о базовом типехотя, так что вам нужно будет привести, если вы хотите выполнить какие-либо специфичные для подтипа операции.Например:
// Assuming you know that there's at least one entry...
Control firstControl = controls[0];
TextBox tb = firstControl as TextBox;
if (tb != null)
{
// Use tb here
}
Если вы хотите получить все элементы определенного типа (или их подтипа), вы можете использовать метод OfType<>
:
foreach (TextBox tb in controls.OfType<TextBox>())
{
// Use tb here
}