我需要一个类型安全的多类型集合,例如,一个从通用标记类映射Tag<T>
到type对象的映射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#我需要一个通用映射,但不能精确指定其参数?
你有试过吗?的所有类别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);
}
}
调试信息-
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句