无法使用三元修复可空警告 - .net

问题描述 投票:0回答:1

以下代码会产生警告

Warning  CS8600  Converting null literal or possible null value to non-nullable type.

int? a = 1;
string lineCount = a != null ? a.ToString() : string.Empty;

看来是因为

ToString()
返回了
string?
。然而,即使将其转换为
string
也不会删除警告。

string lineCount = a != null ? (string)a.ToString() : string.Empty;

但是,如果整数不可为空,则不会产生此警告。

如何摆脱这个警告?

c# .net-core nullable-reference-types
1个回答
3
投票

对此有两种解决方案。

首先,您可以确保您在

ToString()
上拨打
int
,而不是
Nullable<int>
:

int? a = 1;
string lineCount = a != null ? a.Value.ToString() : string.Empty;

注意这里使用

a.Value
。这样,编译器就知道您在
int
上调用它,并且正如您在问题中所说,编译器知道
int.ToString()
永远不会返回
null
。 (它声明返回
string
,而不是
string?
...而
Nullable<T>.ToString()
仍然声明返回
string?
。)

此方法的一个变体是使用模式匹配来捕获不可为空的整数:

int? a = 1;
string lineCount = a is int value ? value.ToString() : string.Empty;

第二种方法是将空条件运算符与空合并运算符结合使用:

int? a = 1;
string lineCount = a?.ToString() ?? string.Empty;

我个人会使用它作为一种更简单的方法。

© www.soinside.com 2019 - 2024. All rights reserved.