我需要一个类型安全的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#我需要一个通用的地图,但不能准确指定它的参数?
答案 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);
}
}
调试信息 -