1

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

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

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

4

5 回答 5

7

您需要使用可为的类型。将其更改为

char?[] niz = new char?[16];

那么您的代码将起作用

if (!niz[6].HasValue) 
  Console.WriteLine("6th is empty");
于 2013-07-21T12:55:12.793 回答
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));

正如 Ehsan 建议的那样,您可以使用可空字符数组,但同样,您将不知道 item 是否未初始化,或者您已为其分配null了值。我建议你使用List<T>类而不是数组。它将仅包含您需要的项目(即没有默认的空项目)。

于 2013-07-21T12:53:07.490 回答
1

因为您使用的是字符,所以您需要说:

if (niz[6] == '\0') Console.WriteLine("6th 为空");

字符不能等于 null。

于 2013-07-21T12:56:06.213 回答
0

问题是 char 将使用默认值初始化。你需要像这样使它可以为空:

char?[] niz = new char?[16];
于 2013-07-21T12:55:27.660 回答
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);
        }
于 2013-07-21T13:02:01.233 回答