我需要一个类型安全的多类型集合,例如从通用标签类映射的映射 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# 我需要一个通用映射,但无法准确指定其参数?
最佳答案
你试过这个吗? 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);
}
}
调试信息 -
关于java - C# 中的多类泛型集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24350495/