英文:
SonarQube Warning for null reference
问题
我有两段代码,核心逻辑相同,但 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:
Now the warning thrown:
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 = "x";
x += null;
Console.WriteLine(x);
And this will give you a warning:
List<string> y = new List<string>();
y.Add(null); // Not OK
You can suppress the warning by adding a null-forgiving
operator:
clusterIds.Add(item.GetValue("value").ToString()!);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论