Вы не объявили Tracking
в качестве универсального типа, поэтому T
, K
и V
не имеют значения. Вы можете сделать это достаточно легко:
public static class Tracking<T, K, V>
{
...
}
Обратите внимание, что теперь у вас будет отдельные Lists
, Dictionaries
и т. Д. Поля для конкретного типа. Вам нужно будет сделать методы не универсальными.
Альтернативой может быть неуниверсальный класс верхнего уровня с универсальными методами и универсальными вложенными типами:
public static class Tracking
{
private static class ListHelper<T>
{
internal static List<TrackList<T>> Lists = new List<TrackList<T>>();
}
private static class DictionaryHelper<K, V>
{
internal static List<TrackedDictionary<K,V>> Dictionaries =
new List<TrackedDictionary<K,V>>()
}
public static void Register<K,V>(TrackedDictionary<K,V> dictionary)
{
DictionaryHelper<K, V>.Dictionaries.Add(dictionary);
}
public static void Register<T> (TrackList<T> list)
{
ListHelper<T>.Lists.Add(list);
}
}
Я бы также настоятельно не советовал против публичных полей, подобных этой ... и против широкого использования статики для начала, учитывая проблемы, которые они вызывают для тестируемости.