C# 如何用空值而不是零初始化通用 int 数组?
C# how to initialize generic int array with nulls instead of zeros?
如果我声明如下:
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;
有没有办法让它像这样初始化?
foo[0]=null;
foo[1]=null;
foo[2]=null;
我问是因为'0'有特殊含义,我想用'null'代替表示数组元素还没有设置。请注意,我使用的是泛型,有时我不会使用 int 类型 - 例如,有时我可能会使用引用类型。
NULL
不能是int
类型。但可以是int?
类型。做 int?[]
它将有空值。因为它用 default(T)
填充数组,在 T int?
的情况下将是 NULL
.
int
是一个值类型,不能设置为null
。如果要允许空值,则必须使用 Nullable<int>
作为类型参数,或者更简洁地使用 int?
.
int?[] foo = GetFoo<int?>(3);
如果我声明如下:
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;
有没有办法让它像这样初始化?
foo[0]=null;
foo[1]=null;
foo[2]=null;
我问是因为'0'有特殊含义,我想用'null'代替表示数组元素还没有设置。请注意,我使用的是泛型,有时我不会使用 int 类型 - 例如,有时我可能会使用引用类型。
NULL
不能是int
类型。但可以是int?
类型。做 int?[]
它将有空值。因为它用 default(T)
填充数组,在 T int?
的情况下将是 NULL
.
int
是一个值类型,不能设置为null
。如果要允许空值,则必须使用 Nullable<int>
作为类型参数,或者更简洁地使用 int?
.
int?[] foo = GetFoo<int?>(3);