C#如何用null而不是零来初始化泛型int数组?

时间:2015-08-19 16:54:14

标签: c# generics nullable

如果我宣布以下内容:

if (array[i] >= firstVal && array[i] <= lastVal) {
    newArray.push(array[i]); // Add to new array
}
else {
    newArray.push(null);
}

在客户端代码中我将上述内容称为:

    public T[] GetFoo<T>(int length)
    {
        return new T[length];
    }

然后int[] foo = GetFoo<int>(3); 将被初始化为:

foo[]

有没有办法可以让它像这样初始化?

foo[0]=0;
foo[1]=0;
foo[2]=0;

我问因为&#39; 0&#39;有特殊意义,我想使用&#39; null&#39;而是表示尚未设置数组元素。请注意,我使用的是泛型,有时我不会使用int - 例如,有时候我可能会使用引用类型。

2 个答案:

答案 0 :(得分:6)

int是一种无法设置为null的值类型。如果您想允许空值,则必须使用Nullable<int>作为类型参数,或者更加简洁int?

int?[] foo = GetFoo<int?>(3);

答案 1 :(得分:2)

NULL不能是int类型。但它可以是int?类型。执行int?[]并且它将具有空值。因为它使用default(T)填充数组,如果T int?将为NULL