2011-03-16 49 views
2

我有一个类,我有一个字典持有一个特定的密钥。但价值应该是通用的。如何创建通用字典?

喜欢的东西:

private Dictionary<String,TValue> _Dictionary; 

但TValue没有找到(obvesly),但我应该把别的什么?我找到了IList的解决方案,但我只想添加一个通用对象。

+0

这将用于何处? – 2011-03-16 20:59:46

回答

2

所以你想要一个通用字典?使用预先定义的类。

public Dictionary<int, string> _dictionary = new Dictionary<int, string>(); 

这就给了你一个整数的关键一本字典,和一个字符串值。如果你需要一个只有其中一个变量的字典,你可以继承字典来创建你自己的类型。

public class KeyTypeConstantDictionary<T> : Dictionary<int, T> 
{ 
} 

然后使用它是像这样:

KeyTypeConstantDictionary<string> x = new KeyTypeConstantDictonary<string>(); 
// Equivalent to Dictionary<int, string>() 
KeyTypeConstantDictionary<SomeObject> x = new KeyTypeConstantDictonary<SomeObject>(); 
// Equivalent to Dictionary<int, SomeObject>() 

希望我理解正确你的问题。

2

如果您在通用类型中使用此类型,则Tejs answer是合适的。

但是,如果你只是试图与固定式按键的字典,但可以存储任何值,一种选择是只使用System.Object为你的价值:

private Dictionary<string, object> _dictionary; 

这将允许您将任何对象分配给该值。但是,这会带来潜在的危险,因为您会丢失类型安全性,并且需要确保正确解开并转换对象。

+0

另外,将对象类型的值改为不会比System.Collections.Hashtable好多了! = D – Tejs 2011-03-16 21:09:13

+0

@Tejs:这取决于你的目标是什么 - 你打算在价值中存储什么?这将帮助我们确定实际上最好的选择...... – 2011-03-16 22:20:32