Если вы выполняете некоторые функции над типизированными данными вне содержащего класса, тогда вам нужно знать тип заранее.
Не приятно:
foreach (Item item in list)
{
ItemGeneric<int> intItem = item as ItemGeneric<int>;
if (intItem != null)
{
//do stuff
}
}
Вы можете решить эту проблему, переместив функциональность в класс, содержащий данные.
(см. инкапсуляция )
Итак, вы можете использовать свой список следующим образом:
foreach (Item item in list)
{
item.DoStuff();
}
, что означает, что вам понадобится DoStuff для вашего класса Item:
public abstract class Item
{
public abstract void DoStuff();
}
.. и может реализовать это на вашем ItemGeneric:
public class ItemGeneric<T> : Item
{
public T Data { get; set; }
public override void DoStuff()
{
//do generic typed stuff here
Console.WriteLine(Data);
}
}