【问题标题】:What does !? and ! mean in C# while indexing a collection?什么!?和 !在索引集合时在 C# 中是什么意思?
【发布时间】:2022-01-11 20:28:15
【问题描述】:
  List<int> testList;
// <some processing which loads data into testList>
  var x = testList![4];
  var y = testList!?[3];

编译器不会抛出错误。 x 被解析为 int。 y 被解析为 int?。 有什么作用!运算符在这种情况下的意思(如果后面有一个?)

怎么样!?由编译器解释? 是否在运行时忽略了 null 宽恕运算符?如果 itemsList 在运行时为 null 会发生什么?

可以猜到吗!?被认为是?在运行时?

【问题讨论】:

  • 已重新打开问题。我不认为这是关于 null 宽恕运算符的重复问题,而是当您同时使用 !? 时有关运算符优先级的问题。我自己以前没见过,觉得很有趣。想知道 C# 规范对此有何评论。

标签: c# operators nullable


【解决方案1】:

啊,那个——有趣。

C# 8,Null Forgiving 运算符。

基本上你告诉代码分析器这个值不会为空(testList)。

哪个 - 给定代码示例 - 在 is 是不明智的,无论如何都不会为空。

【讨论】:

  • 如果被赋值,它在运行时仍然可以为空,对吧?参考docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
  • 我从来没有说过不是这种情况——只是在示例中,它只分配了一次并带有一个值,所以它不能为空。代码分析器应该会看到这一点。
  • 请忘记提供给 testList 的示例分配。我已经编辑了这个问题以避免混淆。假设 testList 可以为 null 或非 null。
  • 是的。 !" 将使代码分析器安静下来——它不会神奇地使空指针异常消失。
猜你喜欢
  • 2013-03-09
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 2017-09-12
  • 2011-08-12
  • 2017-06-11
  • 2018-03-05
  • 2023-03-27
相关资源
最近更新 更多