SonarQube关于空引用的警告

huangapple go评论59阅读模式
英文:

SonarQube Warning for null reference

问题

我有两段代码,核心逻辑相同,但 SonarQube 表现不同,给我一个警告:

先看看没有警告的片段:

SonarQube关于空引用的警告

现在抛出的警告:

SonarQube关于空引用的警告

为什么在一个地方看到警告而在另一个地方看不到。同时,我该如何解决这个警告。

我已经尝试过:

foreach (JObject item in jArray)
{
   if(item != null)
   {
      clusterIds.Add(item.GetValue("value").ToString());
}}

或者检查 item.values != null

英文:

I have 2 pieces of code where the core logic is same but SonarQube behaves different and gives me a warning:

First see the no warning snip:

SonarQube关于空引用的警告

Now the warning thrown:

SonarQube关于空引用的警告

Why am I seeing the warning at one place and not other. ALso, How Can I overcome this warning.

I have already tried:

foreach (JObject item in jArray)
{
   if(item != null)
   {
      clusterIds.Add(item.GetValue("value").ToString());
}}

or checking if item.values != null

答案1

得分: 1

在最近的.NET版本中,.ToString() 被声明为 string? ToString(),因此它可能返回null。

你看到的差异是因为 字符串连接运算符 += 允许将null字符串连接到非null字符串(它什么也不做),但是你的 clusterIds 被声明为一个不能包含null的列表,因此你看到的是警告。

明确一下,这是可以的:

string x = "x";
x += null;
Console.WriteLine(x);

而这将会给你一个警告:

List<string> y = new List<string>();
y.Add(null);  // 不可以

你可以通过添加一个 null-forgiving 操作符来抑制警告:

clusterIds.Add(item.GetValue("value").ToString()!);
英文:

In recent .NET versions, .ToString() is declared as string? ToString(), so it could return null.

The difference you're seeing is because the string concatenation operator += allows a null string to be concatenated to a non-null string (it does nothing), but your clusterIds is declared as a list that cannot contain nulls, so you get the warning that you're seeing.

To be clear, this is OK:

string x = &quot;x&quot;;
x += null;
Console.WriteLine(x);

And this will give you a warning:

List&lt;string&gt; y = new List&lt;string&gt;();
y.Add(null);  // Not OK

You can suppress the warning by adding a null-forgiving operator:

clusterIds.Add(item.GetValue(&quot;value&quot;).ToString()!);

huangapple
  • 本文由 发表于 2023年2月14日 00:17:42
  • 转载请务必保留本文链接:https://go.coder-hub.com/75438512.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定