Вы не можете достичь этого прямым способом. Тип элемента List<T>
должен быть базовым типом, общим для всех типов, которые вы хотите добавить в список.
Вы можете иметь List<object>
или обертку вокруг List<object>
причины. Однако во время выполнения вам нужно будет проверить, имеют ли добавленные к нему элементы правильные типы, и вам придется преобразовать элементы, полученные из списка, в правильный тип.
Если вы хотите хранить разные типы в одном и том же списке, хорошим вариантом будет создание интерфейса, который должны реализовывать все эти типы
public interface ICommonInterface
{
int Number { get; }
string Text { get; }
}
public Class1 : ICommonInterface
{
public int Number { get; set; }
public string Text { get; set; }
public string AnAdditionalProperty { get; set; }
}
public NumberWrapper : ICommonInterface
{
public NumberWrapper (int number)
{
this.Number = number;
this.Text = number.ToString();
}
public int Number { get; private set; }
public string Text { get; private set; }
}
public TextWrapper : ICommonInterface
{
public TextWrapper (string text)
{
this.Text = text;
int i;
Int32.TryParse(text, out i);
this.Number = i;
}
public int Number { get; private set; }
public string Text { get; private set; }
}
Тогда вы можете объявить свой список как
List<ICommonInterface> lst = new List<ICommonInterface>();
lst.Add(new Class1());
lst.Add(new NumberWrapper(77));
lst.Add(new TextWrapper("hello"));
Console.WriteLine(lst[0].Text);