我刚刚遇到一个奇怪的错误:

private bool GetBoolValue()
{
    //Do some logic and return true or false
}

然后,在另一种方法中,类似这样:

int? x = GetBoolValue() ? 10 : null;

很简单,如果该方法返回true,则将10赋值给null int x.否则,将null赋值给nullable int.但是,编译器会抱怨:

错误%1无法确定条件表达式的类型,因为int<null>之间没有隐式转换.

我疯了吗?

推荐答案

编译器首先try 计算右侧的表达式:

GetBoolValue() ? 10 : null

10int(不是int?),nullnull.这两者之间没有隐含的转换,因此出现了错误消息.

如果将右侧表达式更改为以下表达式之一,则它将编译,因为在int?null(#1)以及intint?(#2,#3)之间存在隐式转换.

GetBoolValue() ? (int?)10 : null    // #1
GetBoolValue() ? 10 : (int?)null    // #2
GetBoolValue() ? 10 : default(int?) // #3

.net相关问答推荐

.NET MAUI垂直扫描视图(tiktok幻灯片等)

Visual Studio 2022 中的目标操作系统和目标运行时有什么区别?

将 Moq 模拟对象传递给构造函数

log4net 与 TraceSource

Silverlight 与 Flex

BackgroundWorker 中未处理的异常

托管和非托管代码、内存和大小有什么区别?

C# 中 try/finally 的开销?

如何使用 log4net 记录跟踪消息?

控制台应用程序的退出时

如何制作通用类型转换函数

监听依赖属性的变化

.NET 中的对象引用有多大?

哪个密码字符在 winforms 文本框中显示黑点 (•)?

在关闭警告中访问 foreach 变量

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

从字节数组中读取 C# 中的 C/C++ 数据 struct

如何在不使用 3rd 方库的情况下登录 C#?

ConfigurationManager.AppSettings - 如何修改和保存?

.NET 图形库?