如何将对象数组强制转换为泛型类型数组

本文关键字:数组 转换 泛型类型 对象 | 更新日期: 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。