我在C#中使用非常简单的数组:
char[] niz = new char[16];
niz[0] = 'c';
niz[1] = 's';
niz[2] = 'h';
niz[3] = 'a';
niz[4] = 'r';
niz[5] = 'p';
Run Code Online (Sandbox Code Playgroud)
如何检查此数组的哪个元素为空?
我试过这段代码:
if (niz[6] == null) Console.WriteLine("6th is empty");
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,它不是空的,我不知道为什么.
你能帮我解决这个问题吗?
您需要使用可空类型.将此更改为
char?[] niz = new char?[16];
Run Code Online (Sandbox Code Playgroud)
那么你的代码就可以了
if (!niz[6].HasValue)
Console.WriteLine("6th is empty");
Run Code Online (Sandbox Code Playgroud)
将使用数组元素类型的默认值初始化数组.Char不是引用类型,因此null它不是默认值.对于char默认是0.
您可以检查array[i] == default(char),但这不会告诉您数组项是否为空,或者它是否具有您指定的默认值:
char[] niz = new char[16];
niz[0] = 'c';
niz[1] = (char)0; // default value
niz[2] = '\0'; // default value
niz[3] = 'a';
niz[4] = 'r';
niz[5] = 'p';
for(int i = 0; i < niz.Length; i++)
Console.WriteLine(niz[i] == default(char));
Run Code Online (Sandbox Code Playgroud)
正如Ehsan建议的那样,你可以使用可空字符数组,但同样,你不会知道项目是否未初始化,或者你是否null为其赋值.我建议你使用List<T>class而不是array.它将只包含您需要的项目(即没有默认的空项目).