You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# ToDoList代码空值与空字符串数组问题咨询

C# ToDoList空值与空字符串处理问题

我编写了如下C# ToDoList类代码,当前存在空值(null)与空字符串数组的处理问题:

class ToDoList { 
    public static void toDO() {

        List<string[]> addEntry = [];
        bool toDoLoop = true;

        while (toDoLoop) {
            Clear(); 
            WriteLine(@"
		Here is your to do list!");

            for (int i = 1; i < addEntry.Count; i++)
            {
                WriteLine($@"
		To Do {i}: {addEntry[i][0]}");
            }
            Write(@"
		[N]ew Entry	[E]xit	");

            string? userChoice = ReadLine();
            switch (userChoice)
            {
                case "n":
                case "N":
                    Write(@"
		Add New Entry: ");
                    string?[] newToDo = new string[1];

                    newToDo[0] = ReadLine();

                    if (newToDo.Length == 0) { 
                        WriteLine(@"
		Entries can't be null!"); 
                    }

                    else { 
                        addEntry.Add(newToDo); 
                    }
                    break;

                case "e":
                case "E":
                    Clear();
                    WriteLine(@"

		Closing To Do!");
                    toDoLoop = false;
                    break;

                default:
                    Clear();
                    WriteLine(@"
		Invalid Entry!");
                    break;
            }
        }
    }
}

我尝试了多种判断逻辑,但均未解决问题:

if (newToDo[0] == "")

if (newToDo[0] != )

if (newToDo[0] is null)

if (newToDo[0] is not null)

if (!string.IsNullOrEmpty(newToDo[0]))

想咨询我的思路是否完全错误,或是至少方向正确?


解答

你的思路方向是对的,问题出在判断逻辑的位置和对象错了,不是思路本身的问题:

  1. 当前代码的无效判断:你现在写的if (newToDo.Length == 0)完全没用——因为你初始化newToDo时是new string[1],数组长度固定为1,这个条件永远不会成立,等于白写。
  2. 你尝试的判断逻辑是正确方向:比如string.IsNullOrEmpty(newToDo[0])就是用来检测空值或空字符串的标准方法,但你没把这些判断替换掉原来的数组长度判断,等于没生效。

修正后的核心代码片段:

case "n":
case "N":
    Write(@"
		Add New Entry: ");
    string?[] newToDo = new string[1];
    newToDo[0] = ReadLine();

    // 替换成正确的判断逻辑
    if (string.IsNullOrEmpty(newToDo[0])) { 
        WriteLine(@"
		Entries can't be null or empty!"); 
    }
    else { 
        addEntry.Add(newToDo); 
    }
    break;

另外还有两个小问题需要注意:

  • 遍历待办列表时,你从i=1开始,会跳过List的第一个元素(List索引从0开始),应该改成:
    for (int i = 0; i < addEntry.Count; i++)
    {
        WriteLine($@"
      	To Do {i+1}: {addEntry[i][0]}");
    }
    
  • 如果你只是存单个待办文本,List<string[]>完全没必要,直接用List<string>更简洁,减少不必要的数组嵌套。

内容的提问来源于stack exchange,提问作者user23195977

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:32:04