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]))
想咨询我的思路是否完全错误,或是至少方向正确?
解答
你的思路方向是对的,问题出在判断逻辑的位置和对象错了,不是思路本身的问题:
- 当前代码的无效判断:你现在写的
if (newToDo.Length == 0)完全没用——因为你初始化newToDo时是new string[1],数组长度固定为1,这个条件永远不会成立,等于白写。 - 你尝试的判断逻辑是正确方向:比如
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
相关产品推荐
相关产品推荐

