检查空或null的List

21 浏览
0 Comments

检查空或null的List

我有一个 List,有时它是空的或者为 null。我想要能够检查它是否包含任何 List 项,如果没有,则向 List 添加一个对象。\n// 我有一个 List,有时没有添加任何数据\nvar myList = new List();\n// 表达式始终为假\nif (myList == null)\n Console.WriteLine(\"List 永远不会为 null\");\n// 如果 myList[0] 为 null,则添加一个新项\nif (myList.Count == 0)\n myList.Add(\"new item\");\n// 遇到错误:索引超出范围。必须为非负值且小于集合的大小。\n// 内部异常显示为 \"null\"\n

0
0 Comments

在上述内容中,出现了一个问题:如何检查一个空的或者为null的List。下面是问题出现的原因和解决方法:\n问题出现的原因是:在代码中,如果List是未实例化的,那么使用myList.Count == 0来检查是否为空会抛出异常。\n解决方法是:使用myList != null && myList.Count == 0来检查是否为空。这样可以避免在List未实例化时抛出异常。\n更好的解决方法是使用!myList.Any()来检查是否为空。这种方法比线性计算列表元素的数量更快,而且具有短路功能。\n此外,评论中还提到了一些其他内容:\n- 使用myList.Any()比使用myList.Count == 0更常见、可读性更好。\n- 使用myList.Count会检查列表中的每个元素,而!myList.Any()不会。\n- myList.Count并不会遍历列表,List内部维护了一个变量来保存列表的大小,类似于读取一个属性。这是一个O(1)的操作。\n要检查一个空的或者为null的List,可以使用!myList.Any()来判断,这种方法更高效、更常见、更可读。同时,要注意在List未实例化时使用myList.Count == 0会抛出异常,所以需要先判断myList是否为null。

0
0 Comments

在检查空或null的List时,问题的出现原因是无法保证列表不为null。解决方法是使用空值条件运算符在单个条件语句中安全地检查null和空列表:\n```cs\nif (list?.Any() != true)\n{\n // 处理空或空列表\n}\n```\n另一种方法是使用`if (list?.Any().GetValueOrDefault())`,它可以去除否定比较。\n\"if (list?.Any()?.GetValueOrDefault())\"是否可以?是的,这将是另一种很好的方法。乍一看可能不太明显(至少对我来说),但它是一个同样好的解决方案。\n是的,我尽量避免否定条件,如果可能的话,每次看到\"!variable\"或\"!=\"的时候。\n可能是一个好的替代方案吗?\"if (list?.Any() is false)\"。这不是等价的,因为\"null is false\"不会评估为true,例如,这允许你区分bool?变量中的内容。

0
0 Comments

在上述代码中,我们可以看到针对空或null的List进行检查的问题。在第一个代码示例中,通过检查myList是否为null并且不包含任何项来判断列表是否为空。如果列表为空,则会添加新项。\n然而,为了更简洁和易读,可以使用扩展方法或Null-conditional操作符来解决这个问题。在第二个代码示例中,我们定义了一个名为Safe的扩展方法,用于安全地访问任何集合。该方法检查集合是否为null,并通过yield break返回一个空集合。然后,我们可以使用Safe方法来检查列表是否为空。\n在第三个代码示例中,使用了Null-conditional操作符来检查列表是否为null,并使用Any()方法来判断列表是否包含任何项。如果列表为空,则会添加新项。\n此外,还提供了其他一些关于Null-conditional操作符的用法,如使用Count()方法、Length属性或直接使用Any()方法来检查列表是否为空。\n总结起来,针对空或null的List进行检查的问题的解决方法有两种:使用扩展方法Safe()或使用Null-conditional操作符。这些方法可以更简洁和易读地判断列表是否为空,并在需要时添加新项。

0