如何检查char数组元素是否为空?

use*_*003 1 c# arrays char

我在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)

但在这种情况下,它不是空的,我不知道为什么.

你能帮我解决这个问题吗?

Ehs*_*san 7

您需要使用可空类型.将此更改为

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)


Ser*_*kiy 6

将使用数组元素类型的默认值初始化数组.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.它将只包含您需要的项目(即没有默认的空项目).