C#中的多类泛型集合

时间:2014-06-22 10:49:54

标签: java c# generics wildcard

我需要一个类型安全的multitype集合,例如,从通用标记类Tag<T>映射到类型T的对象的映射。在Java中,我会写这样的东西:

class ClassMap {
    private HashMap<Tag<?>,?> map = new HashMap<>();

    <T> void put(Tag<T> tag, T value){
        map.put(tag,value);
    }

    <T> get(Tag<T> tag){
        return (T) map.get(tag);
    }
}

该集合是类型安全的,即,当集合检查该类是否与插入时的标记相对应时,强制转换(T)将始终成功。

但是如何在C#中做到这一点? Afaik,C#中没有通配符,所以我不能在这里写HashMap<Tag<?>,?>。我怎么能告诉C#我需要一个通用的地图,但不能准确指定它的参数?

1 个答案:

答案 0 :(得分:2)

你试过这个吗?所有C#类都来自object

编辑:对象类引用 -

http://msdn.microsoft.com/en-us/library/system.object.aspx

您可以将任何对象强制转换为object类型 -

    class Tag<T>{

    }
    class ClassMap {
        private Dictionary<object, object> map = new Dictionary<object,object>();

        public void put<T>(Tag<T> tag, T value){
            map.Add(tag, value);
        }

        public T get<T>(Tag<T> tag){
            return (T)map[tag];
        }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            ClassMap v = new ClassMap();
            Tag<Int16> t = new Tag<short>();
            v.put<short>(t, 10);
            var tt = v.get<short>(t);
        }
    }

调试信息 -

enter image description here