为什么 null 需要在这里进行显式类型转换? [复制]

2023-12-28

以下代码无法编译:

//int a = ...
int? b = (int?) (a != 0 ? a : null);

为了编译,需要改为

int? b = (a != 0 ? a : (int?) null);

既然两者b = null and b = a是合法的,这对我来说没有意义。

为什么我们必须投射null进入一个int?为什么我们不能简单地为整个表达式提供显式类型转换(我知道在其他情况下这是可能的)?


来自 C# 语言规范第 7.13 章:

?: 运算符的第二个和第三个操作数控制条件表达式的类型。设 X 和 Y 为第二个和第三个操作数的类型。然后,

  • 如果 X 和 Y 是相同类型,则这就是条件表达式的类型。
  • 否则,如果存在从 X 到 Y 的隐式转换(第 6.1 节),但不存在从 Y 到 X 的隐式转换,则 Y 是条件表达式的类型。
  • 否则,如果存在从 Y 到 X 的隐式转换(第 6.1 节),但不存在从 X 到 Y 的隐式转换(第 6.1 节),则 X 是条件表达式的类型。
  • 否则,无法确定表达式类型,并且会发生编译时错误。

在您的情况下,没有从 int 到 null 的隐式转换,也没有相反的转换。你的强制转换解决了问题,int可以转换为int吗?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 null 需要在这里进行显式类型转换? [复制] 的相关文章

  • 解析通过asp:FileUpload上传的XML文件

    我有一个场景 用户将上传 XML 文件 我想将该文件添加到数据库中的表中 不过 困难的部分是我需要解析文件 然后将一些信息添加到一些不同的表中 显示如何获取 XML 文件的每个示例都使用 URI 来获取文件 但是如何直接从数据库获取文件 或
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • argc 和 argv 在 Windows 中没有用吗?

    在 Linux 中 argc 和 argv 计算终端中的参数 但在 Windows 中 我找不到放置第二个参数的地方 事实上 每次我运行该程序时 它都会创建那个丑陋的黑色窗口 我什至没有机会给出任何争论 那么这两个变量在Windows平台下
  • OpenMP 循环数组访问中的错误共享

    我想利用 OpenMP 来并行执行我的任务 我需要将数组的所有元素减去相同的数量并将结果写入另一个向量中 两个数组都是动态分配的malloc第一个填充了文件中的值 每个元素都有类型uint64 t pragma omp parallel f
  • 如何让 PCRE 与 C++ 一起使用?

    这是一个新手问题 但我希望我能尽可能清楚地表达我的问题 我正在尝试用 C 进行模式匹配 我已经从以下位置下载了 PCRE 的 Win32 版本here http gnuwin32 sourceforge net packages pcre
  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 为什么 ASP.Net MVC Range 属性采用类型?

    我只是想知道为什么范围验证属性可以采用类型和两个字符串作为参数 这是为了根据枚举或类似的东西验证字符串吗 另外 我想做的是找到一种简单的方法来验证必须出现在枚举中的 3 个字符的字符串 有什么建议吗 谢谢 亚历克斯 我确实发现你提到的 Ra
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst
  • 自动化 WinDBG 或以其他方式从转储文件中提取信息?

    假设我有一个进程的内存转储 我想对其运行报告 所以本质上我想打开 WinDBG 加载 SOS 并运行一个脚本 该脚本运行一些命令 解析输出 然后基于该结果运行更多命令 除了像 SendKeys 这样的黑客行为之外 还有没有办法自动化 脚本化
  • 通过 GroupPrincipal 查找用户

    在我的 Active Directory my domain 中 我有许多组 UserGrp1 UserGrp2 等 其中有许多用户 一个用户可以存在于多个组中 我目前的代码允许我使用 GroupPrincipal 类来查找组 然后从那里获
  • 为什么我们不在函数中通过引用传递 POD?

    我总是被告知我们不应该通过引用传递 POD 但最近我发现引用实际上根本不占用内存 那么为什么我们选择这样写 void DoSomething int iNumber 代替 void DoSomething const int riNumbe
  • std::thread <未解析的重载函数类型> 错误

    我试图从我的类中生成一个线程 并且该线程在我的类中执行特定的方法 代码如下所示 class ThreadClass int myThread int arg do something void createThread thread t t
  • SQL Server 存储过程更新不适用于 ASP.Net C# GridView RowUpdating

    我遇到了问题 但没有抛出任何错误 发生的情况是 我有一个存储过程正在驱动我的更新 但我无法更新 gridview 我击中了Update链接按钮 但它实际上并没有更新记录 这是我的存储过程 ALTER PROCEDURE dbo CompDe
  • Objective-C 理解 isKindOfClass

    Objective C 和 XCode 的最新版本 4 4 我有一个代码片段 我无法理解为什么我能够使用某些行 让我解释一下 For understanding purpose NSMutableArray programStack id
  • 为什么 wait() 将分叉进程的状态设置为 255 而不是 -1 退出状态?

    我试图从子进程返回一个整数值 但是 如果我使用exit 1 I get 256作为输出wait Using exit 1 gives 65280 有没有办法获取从子进程发送的实际 int 值 if pid fork exit 1 waitp
  • 使用实体框架的子查询

    我正在移植一个子系统NHibernate to 实体框架并希望了解将以下查询移植到的最佳方法EF var date DateTime Now It can be any day AccountBalanceByDate abbd null
  • 获取 C# 字符串的非第一个段的快速而巧妙的方法

    I do a split 在一个字符串上 我想拉出返回字符串的第一个元素以获得字符串的其余部分 f e THIS IS AN AMAZING STRING split 我想要得到除了这个之外的所有单词 这是 是一根神奇的绳子 该字符串在第一
  • QT 和 Crypto++ 以及 /MTd

    我有两个带有 MSVC2013 32 位编译器的 QT 5 5 项目 第一个是 Qt 控制台应用程序 正在使用 crypto 这两个在 pro 文件中 QMAKE CXXFLAGS RELEASE MT QMAKE CXXFLAGS DEB
  • Admob WP8 System.UnauthorizedAccessException

    我正在使用 VS2012 开发 WP8 应用程序 我希望添加 Admob 横幅广告 不幸的是它引发了异常 导致我的应用程序冻结 为了捕获此 admob 异常 我必须禁用 仅我的代码 VS2012 设置 并且在执行以下代码后 我在最后一行收到

随机推荐

  • getcwd() 和 dirname(__FILE__) 之间的区别?我应该使用哪个?

    在 PHP 中 有什么区别 getcwd dirname FILE 当我从 CLI 回显时 它们都返回相同的结果 echo getcwd n echo dirname FILE n Returns home user Desktop tes
  • 如何通过 JAXB 使用 hashmap 属性?

    我已经摆弄 JAXB 一段时间了 我需要生成如下所示的 xml
  • 在 PHP 中设置多个 Cookie

    感谢您对此提供帮助 我有一个脚本检查登录然后设置一些cookie 正在设置 4 个 cookie 稍后我可能会将一些移动到服务器会话 但现在我正在使用 cookie 我遇到的问题是 在执行脚本的其余部分之前 仅设置了 4 个中的前 2 个
  • 如何在postgresql中禁用外键约束

    我正在使用 AWS Aurora Postgres 并使用 DMS 从 RDS postgres 迁移到 Aurora PG 为了执行完全加载 我想禁用所有对象上的外键约束和触发器 我能够禁用触发器 但找不到禁用约束的方法 下面不起作用 A
  • Eclipse Java 模板在重新启动时重置

    有一次我需要在控制台中输入大量文本 所以我将 sysout 模板更改为 System out println word selection cursor 代替 System out println word selection cursor
  • Appcelerator Titanium:CSS 宽度不适用于百分比

    我在 Appcelerator 中制作了一个 HTML 项目 我想要一个全屏画布 所以在 CSS 中我将属性设置为100 不带引号 我发现它不适用于 Appcelerator 我试过了 100 带引号和Ti UI SIZE两者的尺寸都采用奇
  • 如何在不复制的情况下从字符串流中获取字符?

    在不使用 boost 的情况下从字符串流中提取一组字符的正确 C 11 方法是什么 如果可能的话 我想在不复制的情况下执行此操作 因为使用它的位置是在关键数据循环中 不过 std string 似乎不允许直接访问数据 例如 下面的代码从字符
  • 在 Ruby 中,在字符串开头而不是末尾“咀嚼”最简单的方法是什么?

    在 Ruby 中 有时我需要删除字符串开头的换行符 目前我所做的如下 我想知道做到这一点的最佳方法 谢谢 s naaaa nbbbb s sub n lstrip似乎是你想要的 假设应保留尾随空格 gt gt s naaaa nbbbb g
  • 使用核心服务创建具有元数据字段的多媒体组件

    我正在使用核心服务创建多媒体组件 一切正常 但是 当我在创建多媒体组件的多媒体架构上定义元数据架构字段时 我会收到以下错误 无法找到http www tridion com ContentManager 5 0 DefaultMultime
  • 为什么我收到 CS1012:“字符文字中的字符过多”和 CS0019?

    当尝试将某些内容上传到 Imgur 时 我必须输入授权 我使用WebRequest Headers但这给了我三个错误 2次CS1012错误 字符文字中的字符过多 和 1 次 CS0019 错误 运算符 不能应用于 char 和 method
  • C#源代码中使用特殊字符(例如“ñ”)是否错误?

    最近 使用 C 我刚刚使用拉丁字符声明了一个方法参数 我尝试构建 编译 我的整个解决方案并且它有效 因此我能够执行我的程序 但我很好奇是否在用C 编写的源代码中使用拉丁字符等特殊字符是错误的吗 如果错了 为什么 除此之外还有更多legibl
  • “ClassificationDataSet”中的“target”有什么用?

    我试图找出参数是什么target of ClassificationDataSet可以用来 但我还不清楚 我尝试过的 gt gt gt from pybrain datasets import ClassificationDataSet g
  • 简单的索引优化

    我最近参加了一个简单的技能测试 我得到了反馈 有一个小的索引优化可以改善 表现 技能测试涉及创建生日电子贺卡在线应用程序 用户注册 然后在他们生日那天向他们发送一封电子邮件 我假设这是在一台运行 mysql 数据库的 Linux 服务器上
  • 如何通过 CloudBees Jenkins“立即部署”功能部署非 Web Java 应用程序?

    CloudBees 现在支持 Java 应用程序的部署 是否可以使用 Jenkins 中的 部署到 CloudBees 中的构建后操作来部署您的应用程序 此外 我想使用 Maven程序集插件的 jar with dependations h
  • Google Data studio 中的 COUNTIFS 函数

    我有两列 分别称为大陆和完成度 我想根据以下数据计算每个大陆的完成百分比 这是在 Excel 中使用 COUNTIFS 函数定义的 我们可以在数据工作室中实现这一目标吗 完成百分比公式为 已关闭 状态总数 状态总数 状态值为 开放 进行中
  • 迭代时从映射中删除键/值

    我正在创建这样的地图 def myMap 映射基本上是一个键的对象和一个值的整数 当我迭代地图时 我会计算该值 如果它是 0 我会将其删除 我已经尝试过了myMap remove 但我得到了ConcurrentModificationErr
  • 未知文件类型 MIME?

    如果上传的文件没有扩展名 是否必须指定 MIME 类型 换句话说 是否有默认的通用 MIME 类型 您可以使用application octet stream对于未知类型 RFC 2046 http www rfc editor org r
  • 如何忽略带有特定注释的方法的 checkstyle javadoc 警告

    当我有一个没有 javadoc 的公共方法时 Checkstyle 会发出警告 这很好 当我重写公共方法时 我没有收到警告 因为 javadoc 已在该方法的父类中可用 例如 现在我的方法有另一个注释 MyEvent 现在我确实收到了警告
  • 根据两个数字之间的差异多次插入图像。 PHP

    编写一个脚本 计算从 API 检索到的日期之间的差异 我希望它在图像中放入与差异一样多的次数 d1 new DateTime 2012 04 04 d2 new DateTime 2012 03 31 interval d1 gt diff
  • 为什么 null 需要在这里进行显式类型转换? [复制]

    这个问题在这里已经有答案了 以下代码无法编译 int a int b int a 0 a null 为了编译 需要改为 int b a 0 a int null 既然两者b null and b a是合法的 这对我来说没有意义 为什么我们必