【问题标题】:Null Error checking for string[]? [duplicate]检查字符串 [] 的空错误? [复制]
【发布时间】:2017-06-15 18:38:20
【问题描述】:

我的问题是为什么我们需要检查 string[] 中的空错误。 不是string类型默认可以接受null值吗?那么为什么我们应该使用 Null 条件运算符 token(?) 检查字符串 [] 是否包含 null。

例如看看这个方法:

来自《C# and NetFramework 4.6》一书

static void TesterMethod(string[] args)
{
  // We should check for null before accessing the array data!
Console.WriteLine($"You sent me {args?.Length} arguments.");
}

我的意思是如果我们可以将 null 分配给一个字符串,为什么我们应该检查 null 错误? 为什么这会引发错误?

Console.WriteLine($"You sent me {args.Length} arguments.");

【问题讨论】:

  • 在这种情况下,我们不是检查字符串数组是否包含空值,而是检查数组是否为空值。如果我们不进行检查,args.Length 将失败,因为这将转换为 null.Length
  • 因为stringstring[] 是不同的东西。两者都可以是null。如果您尝试从空引用中读取.Length,您将获得NullReferenceException
  • 这里的重复标志是可怕的错误。
  • 注意:上面的代码不检查数组是否包含空字符串。它正在检查数组 is null

标签: c#


【解决方案1】:

如果args 为空,调用它的属性(Length) 将导致NullReferenceException。在调用之前,您必须确保args 不为空。

argsstring 类型的数组,而不是string 本身。

那么为什么我们应该使用 Null 条件运算符 token(?) 来检查 string [] 是否包含 null

它不包含 null,它 null。条件运算符检查的是数组,而不是数组的内容。

【讨论】:

  • 您应该提到? 正在检查变量而不是变量内的项目
  • 里面有没有东西并不重要。它是关于被调用的属性,并补充说这可能会让人们感到困惑。
  • 我不是这个意思。 OP 将 ? 与“检查数组中的每个项目以确保它不为空”混淆
  • @CamiloTerevinto 好的。已更新。
  • {null} 和 {} 有区别吗?
【解决方案2】:

好吧,当您尝试访问或更改值为 null 的字符串时,它可能会引发异常。

最近我正在为学校开发一个联系人列表应用程序,在尝试通过 For Each 循环打印时遇到了来自字符串数组中的空值的错误(我使用的是 VB.NET,但概念是在大多数网络框架中相同)。随着循环的进行,它将搜索一个数组以打印所选联系人的信息。但是,如果达到空值,循环将停止,从而终止应用程序。

所以,这在某种程度上是情境性的。如果你想确保事故不会过早停止你的程序,最好尝试一个空异常以防万一。但是如果您的程序可以按预期运行,并且如果用户不能意外破坏它,那么您可能不需要检查。

【讨论】:

  • 是的,我明白了,我得到了错误,因为我访问了 null 而不是 null 本身的属性
  • 没错。一个字符串可以是"",它仍然会有一个值,但是属性null是不同的
猜你喜欢
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2015-06-14
  • 2011-01-23
  • 2011-04-01
相关资源
最近更新 更多