繁体   English   中英

C#-以通用数组为值的字典

[英]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.ClearBuffer.BlockCopy

您应该使用通用类。 如果从字典中检索到的对象是类型安全的并且不需要强制转换,则使用泛型类的好处是-它已经是必需的类型。

您说“对于所有泛型类型,我的类的操作都完全相同”-如果这意味着我认为的含义,那么这仅仅是在您的情况下增强了泛型类的有用性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM