[英]C# - Dictionary with generic array as value
在我的课堂上,我想使用带有以下声明的字典:
Dictionary<string, T[]>
由于类的操作对于所有泛型类型都是完全相同的,因此我不希望将我的类定义为泛型(这意味着我必须为插入字典中的每种泛型类型创建类的单独实例?) 。
我尝试的一种替代方法是改为使用Dictionary<string, object>
:
public void Add<T>(string str, T value)
{
// Assuming key already exists
var array = (T[]) dictionary[str];
array[0] = value;
}
但是,当遍历字典时,如何将对象值转换回数组?
foreach(string strKey in dictionary.Keys)
{
var array = (T[]) dictionary[strKey]; // How to cast here ?
//...
array[0] = default(T);
}
谢谢。
由于类的操作对于所有泛型类型都是完全相同的
您可以做的是定义一个接口中所有相同的方法,并使您的通用类实现该接口。 完成此操作后,您要做的就是创建一个字典,该字典将Strings作为键和类型为InterfaceName
数组。 这应该使您拥有通用值(而不是object
),并且也不需要键入强制类型转换。
您不强制转换为T[]
,而是使用System.Array
,这是所有数组的基类。
var dictionary = new Dictionary<string, Array>();
foreach( var item in dictionary )
item.Value.SetValue(null, 0);
您无需Array.Clear
转换为特定数组类型即可执行的其他操作是Array.Clear
和Buffer.BlockCopy
。
您应该使用通用类。 如果从字典中检索到的对象是类型安全的并且不需要强制转换,则使用泛型类的好处是-它已经是必需的类型。
您说“对于所有泛型类型,我的类的操作都完全相同”-如果这意味着我认为的含义,那么这仅仅是在您的情况下增强了泛型类的有用性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.