以下代码生成警告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;

但是,如果该integer不可为空,则不会产生此警告.

如何消除此警告?

推荐答案

对此有两种解决方案.

首先,您可以确保拨打int上的ToString(),而不是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?.)

这种方法的一个变体是使用模式匹配来捕获不可空的integer:

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

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

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

就我个人而言,我会使用它作为一种更简单的方法.

Csharp相关问答推荐

当Visual Studio处于升级管理模式时,无法安装Torch运行时

找不到网址:https://localhost:7002/Category/Add?区域= Admin.为什么我的URL是这样生成的?area = Admin而不是/Admin/

始终保留数组中的最后N个值,丢弃最老的

如何阻止注释被包含在C#release build. exe中

实体核心框架--HasColumnType和HasPrecision有什么不同?

Blazor. NET 8—阶段启动配置文件不启动网站VS2022

将XPS转换为PDF C#

try 在Blazor项目中生成html

(乌龙)1&#比c#中的UL&#慢吗?

从c#列表中删除额外的对象&对象&>从ASP.NET WebForm返回json响应

为什么Regex.IsMatch(";\\t";,";\\t";)返回FALSE而不是TRUE?

更改执行目录

Docker Container中的HttpRequest后地址不可用

有没有更好的方法来在CosmosDB上插入非id?

在C#.NET项目中启动时,如何等待提升的PowerShell进程退出?

如何使用.NET Aspire从Blazor应用程序与GRPC API通信?

将C#类导入到PowerShell

Visual Studio 17.8.0制表符自动完成问题--三缩进

在.NET Maui中,Flyoutindow/Hamburger菜单可以在shell 之外实现吗?

ASP.NET Core 8 Web API:如何添加版本控制?