如何将对象数组强制转换为泛型类型数组
本文关键字:数组 转换 泛型类型 对象 | 更新日期: 2023-09-27 18:21:03
我正试图在CSharp中将一个对象数组强制转换为泛型对象数组,但一直收到这个编译器错误。有什么想法吗?
感谢
private const int INITIAL_CAPACITY = 20;
protected int numElements;
protected E[] elements;
/*
* default constructor that creates a new set
* that is initially empty
* */
public ArraySet()
{
numElements = 0;
elements = (E[])(new Object[INITIAL_CAPACITY]);// unchecked
}
谢谢大家,另一个相关的问题,我想把一个特定的元素设置为null。以下代码不起作用。
elements[numElements-1]=null:
那么,我们应该在这里使用什么是正确的null值。感谢
PLB的回答指出了为什么你不需要来做这件事,我只想谈谈为什么你不能做这件事情。
假设您有一个对象数组:
var objectArray = new object[] { 3, 5, 3.3, "test" };
现在,你认为我如何将其转换为统一的泛型类型?不能保证对象数组中的所有实例都是相同类型的,数组可能是异构的,因此:
public static T[] ConvertTo<T>(object[] arr)
{
return (T[])arr;
}
var intArray = ConvertTo<int>(objectArray);
无法真正工作:ConvertTo
方法中的Cannot convert type 'object[]' to 'T[]'
。
在这种情况下,可以测试每一个项目,如果它是合适的类型,特别是因为LINQ已经有了拟合方法:
var intArray = objectArray.OfType<int>().ToArray();
它会给你一个数组:[3, 5]
因此,一个通用版本将是:elementsArray = objectArray.OfType<E>().ToArray();
这里不需要强制转换。用容量初始化阵列就足够了:
elements = new E[INITIAL_CAPACITY];
elements[numElements-1]=null:那么,我们应该在这里使用什么是正确的null值。感谢
c类具有泛型的"default关键字"。因为某些类型可能不可为null。
var number = default(E);
例如,整数不能为null。