对可能是数组的参数的不同操作

时间:2011-04-27 18:58:29

标签: c#

这里T可以是数组或单个对象。如何将数组添加到arraylist或将单个对象添加到同一个arraylist。这给了我一个构建时错误,即AddRange的重载匹配包含无效参数。

T loadedContent;
if (typeof(T).IsArray)
{
    contentArrayList.AddRange(loadedContent);
}
else
{
    contentArrayList.Add(loadedContent);
}

3 个答案:

答案 0 :(得分:0)

编辑:在检查了一些关于强制转换的规则后修正了我的答案{.1}}。

所有特定类型的数组(例如Arrayint[]string[]都派生自基类MyCustomObject[]类,因此,它们实现{{1接口,这是Array方法接受的参数。

假设您的ICollection变量是ArrayList.AddRange对象,您应该可以将contentArrayList变量转换为ArrayList

loadedContent

或者,您可以组合检查是否是带有强制转换的数组:

ICollection

答案 1 :(得分:0)

Wily博士的学徒提供的解决方案可行,但我想发表一些意见。

如果您使用泛型但您仍然致力于特定的数据类型,那么您的代码中必须存在设计问题。基本上你破坏了泛型的目的,如MSDN所述:

  

泛型允许您定义类型安全的数据结构,而无需提交实际的数据类型。

也许你应该重新考虑一些重构,也许是通过添加具有不同参数的方法......

答案 2 :(得分:0)

如果你的contentList是Type ArrayList,那我就是这样。

        ICollection contentArray = loadedContent as ICollection;
        if (contentArray != null)
            contentList.AddRange(contentArray);
        else
            contentList.Add(loadedContent);