我正在尝试将对象数组转换为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:
我们应该在这里使用什么是正确的空值。感谢
答案 0 :(得分:3)
你不需要在这里演员。初始化具有容量的数组就足够了:
elements = new E[INITIAL_CAPACITY];
答案 1 :(得分:3)
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);
无法真正发挥作用:Cannot convert type 'object[]' to 'T[]'
方法中的ConvertTo
。
在这种情况下你可以做的是测试每个项目是否属于合适的类型,特别是因为LINQ已经有适合的方法:
var intArray = objectArray.OfType<int>().ToArray();
这会给你一个数组:[3, 5]
通用版本应为:elementsArray = objectArray.OfType<E>().ToArray();
答案 2 :(得分:0)
elements [numElements - 1] = null: 那么我们应该在这里使用什么是正确的空值。感谢
c#类具有&#39;默认关键字&#39;为你的泛型。因为某些类型可能不可为空。
var number = default(E);
例如,整数不能为空。