这里T可以是数组或单个对象。如何将数组添加到arraylist或将单个对象添加到同一个arraylist。这给了我一个构建时错误,即AddRange
的重载匹配包含无效参数。
T loadedContent;
if (typeof(T).IsArray)
{
contentArrayList.AddRange(loadedContent);
}
else
{
contentArrayList.Add(loadedContent);
}
答案 0 :(得分:0)
编辑:在检查了一些关于强制转换的规则后修正了我的答案{.1}}。
所有特定类型的数组(例如Array
,int[]
或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);