public static class Tracking
{
public static List<TrackList<T>> Lists = new List<TrackList<T>>();
public static List<TrackedDictionary<K,V>> Dictionaries =new List<TrackedDictionary<K,V>>()
public static void Register<K,V>(TrackedDictionary<K,V> dictionary)
{
Dictionaries.Add(dictionary);
}
public static void Register<T> (TrackList<T> list)
{
Lists.Add(list);
}
}
public class TrackList<T> : List<T>
{
private string ListName = null;
private int AvgSize;
public TrackList ()
{ }
public TrackList (string listname, int avgsize)
{
this.ListName = listname;
this.AvgSize = avgsize;
Tracking.Register(this);
}
public int GetListSize ()
{
return this.Count * this.AvgSize;
}
}
public class TrackedDictionary<K, V> : Dictionary<K, V>
{
public string DictionaryName = null;
public byte AvgSize;
public TrackedDictionary ()
{ }
public TrackedDictionary (string dictionaryname, byte avgsize)
{
this.DictionaryName = dictionaryname;
this.AvgSize = avgsize;
Tracking.Register(this);
}
public int GetDictionarySize ()
{
return this.Count * this.AvgSize;
}
}
最佳答案
您还没有将 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);
}
}
我还强烈建议不要使用这样的公共(public)字段...并且不要一开始就广泛使用静态,因为它们会导致可测试性问题。
关于c# - 如何在静态类中创建通用静态字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7255308/