C# 空合并 (??) 运算符的运算符优先级是什么?

2024-01-16

我刚刚尝试了以下操作,其想法是连接两个字符串,用空字符串替换空值。

string a="Hello";
string b=" World";

-- 调试(有趣的是?是打印,并不完全有助于可读性......)

 ? a ?? "" + b ?? "" 

->“你好”

正确的是:

? (a??"")+(b??"")
"Hello World"

我有点期待“Hello World”,或者如果 a 为空,则只是“World”。显然,这与运算符优先级有关,可以通过括号来克服,是否有任何地方记录了这个新运算符的优先级顺序。

(意识到我可能应该使用 stringbuilder 或 String.Concat)

Thanks.


除了你想要的like优先级、ECMA 规定的内容、MS 规范规定的内容以及 csc 实际执行的操作,我有一点建议:

不要这样做.

我想这是much写得更清楚:

string c = (a ?? "") + (b ?? "");

或者,考虑到字符串连接中的 null 最终只是一个空字符串,只需编写:

string c = a + b;

编辑:关于记录的优先级,在两个C# 3.0 规范 http://download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc(Word 文档)和ECMA-334 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf,加法比 ?? 绑定更紧密,而 ?? 比赋值绑定更紧密。另一个答案中给出的 MSDN 链接是错误且奇怪的,IMO。 2008 年 7 月的页面上显示了一项更改,其中移动了条件运算符 - 但显然是错误的!

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

C# 空合并 (??) 运算符的运算符优先级是什么? 的相关文章

  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 在 Visual Studio 2008 上设置预调试事件

    我想在 Visual Studio 中开始调试程序之前运行一个任务 我每次调试程序时都需要运行此任务 因此构建后事件还不够好 我查看了设置的 调试 选项卡 但没有这样的选项 有什么办法可以做到这一点吗 你唯一可以尝试的 IMO 就是尝试Co
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 插入记录后如何从SQL Server获取Identity值

    我在数据库中添加一条记录identity价值 我想在插入后获取身份值 我不想通过存储过程来做到这一点 这是我的代码 SQLString INSERT INTO myTable SQLString Cal1 Cal2 Cal3 Cal4 SQ
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif
  • 防止索引超出范围错误

    我想编写对某些条件的检查 而不必使用 try catch 并且我想避免出现 Index Out of Range 错误的可能性 if array Element 0 Object Length gt 0 array Element 1 Ob
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 如何使用主题文件自定义 ASP.NET 图表

    我想创建一个折线图 其中 x 轴是日期 y 轴上有绿色 0 位置 黄色 1 和红色 2 的位置 我怎样才能做到这一点 目前只有数字 我用 XML 尝试过 但我对它了解不多 而且有点令人困惑 我可以用它访问 y 轴的单个元素并将它们转换为文本
  • 将本地时间 (Java 8) 转换为日期

    我正在尝试转换java time LocalTime反对java util Date但找不到合适的方法 这样做的正确方法是什么 java 似乎没有内置直接转换方法 有什么原因吗 对于可能的重复项 如何换算乔达时间 https stackov
  • 在 WPF 中的网格中显示对其他控件的控件

    我正在开发一个 WPF 应用程序 主窗口的子控件包含在网格中 底行包含一个状态栏 应用程序必须通知用户 我想以编程方式在主窗口右下角的用户控件中显示通知 我希望通知用户控件显示在状态栏和上行中的控件上 如何在网格中包含的其他控件上显示一个控
  • 在网络浏览器中嵌入 Youtube 视频。对象不支持属性或方法

    YouTube 最近停止支持以 www youtube com v key 格式嵌入的视频 所以我试图将视频从 v 转换为 embed 但是 当我尝试导航到视频时 会弹出以下错误 我使用以下命令导航到该网页 WPF
  • 在C++中重载operator[],但要防止a[i]=one_special_specific_value

    我正在实现 Spare Vector ADT 并且想要重载运算符 我有一个 int 和 double 对的列表 我想通过例如创建新节点 5 3 5 a 5 3 5 但我想让它不可能为其中一个节点分配 0 值 因为它应该是一个备用向量 所以当
  • Android 设备:“new ServerSocket(6000)”上的权限被拒绝异常

    我收到 权限被拒绝 异常new ServerSocket 6000 在 Android 设备中 我读过很多帖子 其中说你必须把android permission INTERNET清单中的许可 我已经获得了此许可 并且仍然收到此消息 Non
  • 级联类型.ALL 不起作用

    我已在实体关系中设置了 CascadeType ALL 但每当我保留实体时 它都会部分起作用 前任 会员实体 OneToMany mappedBy member cascade CascadeType ALL private List
  • 对许多 PostgreSQL 查询进行基准测试

    在复杂的网页上会执行数百个查询 我正在寻找一种方法来对这些查询进行基准测试 我尝试嵌入解释分析进入查询resp 进入 psql 函数 选择每个查询的执行时间并进行比较 但解释分析似乎无法以任何方式嵌入 是否有其他解决方案来比较某些查询的执行
  • 从 .txt 中读取单词,并对每个单词进行计数

    我想知道如何像 fscanf 那样读取字符串 我需要在 all txt 中逐字阅读 我需要对每个单词进行计数 collectwords collections defaultdict int with open DatoSO txt r a
  • 正则表达式捕获分隔符之间的字符串

    In this https stackoverflow com questions 1454913 regular expression to find a string included between two characters wh
  • 使用什么数据库来存储和操作大数据?

    我必须决定为我的下一个项目使用哪个数据库服务器 但是像我所做的几乎所有项目一样使用 MySQL 的简单决定现在变得更加困难 因为我期望非常多的记录 数据库会存储一个用户列表 一些其他不相关的表 最后一个是一些用户收集的数据 比方说 如果我有
  • 使用 eXist-db 中的范围索引提高查询性能

    阅读文档http exist db org exist apps doc indexing xml http exist db org exist apps doc indexing xml我发现很难理解如何以及是否可以提高 读取 查询的性
  • 变换scaleX并保持固定的右侧位置

    使用jquery缩放一些文本mousemove但不知道如何使右侧的单词 h2 从固定的右侧位置向左侧扩展 相反 它总是从单词的左边缘开始缩放 我希望这两个单词组合起来始终填充窗口的宽度 当光标向左移动时 左侧单词 h1 缩小 右侧单词 h2
  • Delphi Pascal - 使用 SetFilePointerEx 和 GetFileSizeEx,在读取文件时获取物理媒体的确切大小

    我不知道如何使用 RTL 之外的任何 API 我一直在使用 SetFilePointer 和 GetFileSize 将物理磁盘读入缓冲区并将其转储到文件中 这样的循环可以完成 2GB 以下闪存卡的工作 SetFilePointer PD
  • 在 SQL Server 2008 中创建日期

    有没有类似的东西DATEFROMPARTS year month day 在 SQL Server 2008 中 我想使用当前年份和月份创建日期 但使用我自己的月份日期 这需要在一行中完成 以便在计算列公式中使用 例如 我不确定它是否有效
  • 确定监听某个端口的进程pid

    正如标题所示 我正在运行多个游戏服务器 并且每个服务器都有相同的name但不同PID和port数字 我想匹配PID正在监听某个端口的服务器 然后我想终止这个进程 我需要它来完成我的 bash 脚本 这可能吗 因为在网上还没有找到解决方案 您
  • 如何在Lumen中使用多个数据库

    我们已经使用 Lumen 来构建 API 现在我们需要访问多个数据库 目前使用 env对于数据库配置 但无法找到多个数据库的方法 env 我们需要在哪里读取第二个连接 首先 您需要配置连接 如果您还没有 则需要创建一个config项目目录中
  • 我怎样才能让 onclick 函数只提交我的 form.php

    下面是我试图覆盖的代码 var conf isVip false isMem false var sinaSSOConfig entry mail loginType 0 setDomain true pageCharset UTF 8 t
  • 如何在 Windows 上使用 CMake 进行非交互式构建?

    我想在 Windows 上使用 CMake 设置自动构建 我使用的是 Visual Studio 2005 Update 这是我正在使用的 我将 devenv exe 设置为我的 PATH 然后运行下面的命令来构建 我正在使用 Hudson
  • C# 空合并 (??) 运算符的运算符优先级是什么?

    我刚刚尝试了以下操作 其想法是连接两个字符串 用空字符串替换空值 string a Hello string b World 调试 有趣的是 是打印 并不完全有助于可读性 a b gt 你好 正确的是 a b Hello World 我有点