我在C#中使用非常简单的数组:
char[] niz = new char[16];
niz[0] = 'c';
niz[1] = 's';
niz[2] = 'h';
niz[3] = 'a';
niz[4] = 'r';
niz[5] = 'p';
如何检查此数组的哪个元素为空?
我试过这段代码:
if (niz[6] == null) Console.WriteLine("6th is empty");
但在这种情况下,它不是空的,我不知道为什么。
请帮帮我吗?
答案 0 :(得分:7)
您需要使用nullable类型。将此更改为
char?[] niz = new char?[16];
那么你的代码就可以了
if (!niz[6].HasValue)
Console.WriteLine("6th is empty");
答案 1 :(得分:5)
将使用数组元素类型的默认值初始化数组。 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));
正如Ehsan建议的那样,你可以使用可空字符数组,但同样,你不会知道项目是否未初始化,或者你是否为其分配了null
值。我建议你使用List<T>
类而不是数组。它只包含您需要的项目(即没有默认的空项目)。
答案 2 :(得分:1)
因为你正在使用字符,所以你需要说:
if(niz [6] =='\ 0')Console.WriteLine(“6th为空”);
字符不能等于null。
答案 3 :(得分:0)
问题是char将使用默认值进行初始化。你需要让它像这样可以为空:
char?[] niz = new char?[16];
答案 4 :(得分:0)
char[] niz = new char[16];
niz[0] = 'c';
niz[1] = 's';
niz[2] = 'h';
niz[3] = 'a';
niz[4] = 'r';
niz[5] = 'p';
for (int i = 0; i < niz.Length; i++)
{
if (niz[i] == '\0') Console.WriteLine(i);
}