空传播替换空检查先验条件语句

2023-11-30

看到一个类似的问题,我想知道以下表达式是否...

if (attribute != null && attribute.Description == input)

...与以下零传播变体的行为(几乎)相同?

if (attribute?.Description == input)

到目前为止,我只能确定以下(某种程度上较小的)差异:

  • 万一不可能input是不可为 null 的类型
  • in case input将是其本身null,行为将会改变

我错过了什么吗?还是有其他差异在行为上?


EDIT:最后,我为第一个片段找到的唯一安全替代方案是:

if (attribute?.Description?.Equals(input) ?? false)

代码will工作如果input是不可为 null 的类型。所有不可为空类型都会隐式转换为其可空对应类型,因此input将简单地提升为可空值以与属性值进行比较。

正如您提到的,行为上的唯一区别是,如果input is null,那么第二个片段无法区分attribute being null,当它应该是false,以及哪里Description is null,它应该在哪里true.

哦,这是假设attribute是局部变量或字段。如果它是一个属性(或者实际上是一个更复杂的表达式),那么它可能会产生副作用,或者在计算两次时产生不同的值,就像第一个片段中发生的情况,但第二个片段中则不然,这是行为上的差异。

当然,这都是假设单线程上下文的。在多线程环境中,如果attribute可以从另一个线程访问(因为它是一个可访问的字段,或者因为它在暴露给另一个线程的 lambda 中封闭),那么每次计算时该值可能不同,因此这两个片段出于相同原因而不同上一段。

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

空传播替换空检查先验条件语句 的相关文章

  • 如何使用 VS2022 中的新控制台应用程序模板访问命令行参数

    我想知道如何访问命令行参数 因为这是在Program cs通过 Visual Studio 2022 中控制台应用程序的新模板创建文件 See https aka ms new console template for more infor
  • Windows 10 UWP 中的视觉状态管理器未在页面加载时应用初始状态

    我有一个带有相关面板的页面 可以根据宽度重新组织 但是 除非宽度 gt 720px 否则它似乎不会在加载时应用任何状态 如果我在加载页面后调整页面大小 则两种状态都有效 解决方法是检查加载页面上的窗口大小并手动选择状态 但我相信这应该自动处
  • 是否可以通过引用以基类作为参数的函数来传递派生类

    假设我们有一个抽象基类IBase使用纯虚方法 接口 然后我们推导出CFoo CFoo2来自基类 我们有一个知道如何使用 IBase 的函数 Foo IBase input 这些情况下通常的场景是这样的 IBase ptr static ca
  • Windows CE 6.0 和运行时链接到调试 DLL /MDd

    我在 x86 PC 上使用 Windows CE 6 0 R3 我已经为该平台构建了 NK bin 和 SDK 但我有一些问题需要了解如何使用 MTd 调试 DLL 构建控制台应用程序 如果我尝试构建这个 main c with MDd i
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • ASP.NET 数据集 getdataBy 无法启用约束。一行或多行包含违反非空、唯一或外键约束的值

    你好 我有一个非常简单的网络表单 我在此表单上有一个按钮和一个网格视图 以及一个包含链接表 bill docket docket bill 等的数据集 在按钮上单击我使用以下代码 protected void button click ob
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 是否可以获取指向装箱非托管值类型的指针?

    是否可以获取指向装箱非托管值类型的指针 而无需编写对每个支持的类型进行强制转换的大型 switch 语句 就像是 object val Contains a boxed unmanaged value such as int long by
  • 在 C++ 中初始化指针

    可以在声明时将指针分配给值吗 像这样的东西 int p 1000 是的 您可以在声明时初始化指向值的指针 但是您不能这样做 int p 1000 是个地址运算符 并且您不能将其应用于常量 尽管如果可以 那会很有趣 尝试使用另一个变量 int
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • DataContractJsonSerializer 包含元素类型子类型的通用列表

    我要使用DataContractJsonSerializer用于 JSON 序列化 反序列化 我在 JSON 数组中有两种对象类型 并希望将它们都反序列化为相应的对象类型 具有以下类定义 DataContract public class
  • 如何在Phone类库项目中添加ResourceDictionary并访问它

    我正在开发一个项目 其中我有一个引用图书馆项目的子项目 在我的库项目 电话类库 中 如何创建 ResourceDictionary xaml 其中我需要添加一些样式并在 xaml 文件和 cs 文件中使用它 我需要访问 xaml 文件中的
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 如何从 Function App 设置会话 ID 或创建自定义字段到 Application Insights

    功能应用程序如下 public static async Task
  • PARITY_NONE 是 C++ Windows 中的关键字吗?

    我正在使用 boost 编写一个串行库 并且我有一个枚举 enum parity t PARITY NONE PARITY ODD PARITY EVEN 我收到如下错误 错误 1 错误 C2059 语法错误 我无法弄清楚问题是什么 然后我
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr
  • File.Move 的原子性

    我想将目录中的文件重命名为原子事务 该文件不会更改目录 该路径作为 NTFS 文件系统的 UNC 路径提供 可能位于服务器 03 或 08 上 File Move 对于这些目的来说是原子的吗 例如 它要么成功完成 要么失败 以使原始文件仍然

随机推荐

  • PHP 会话未在页面之间保存

    我刚刚购买了一些新的服务器空间 并将一个非常简单的 PHP 应用程序迁移到其中 该应用程序在我的其他服务器上运行良好 由于某种原因 会话数据没有存储在新服务器上页面之间的 SESSION 变量中 我看过这篇类似的文章和许多其他人尝试解决这个
  • 访问 Tomcat 服务器上的 Web 应用程序资源时出现 NoSuchMethodError

    在网上搜索后 这是一个我无法找到答案的问题 我的 Web 应用程序已部署到 tomcat 服务器 我知道这一切都在工作 因为 index jsp 显示文本 但是当我尝试访问我制作的资源时 应该打印出 hello world tomcat 服
  • 重现带有双表头的复杂表格

    锁定时间78 days 有对该问题内容的争议此时正在解决 目前不接受新的答案或互动 我想创建下表 Where Alzheimer s Disease Assessment Scale Cognitive ADAS CogT0 Rey Ost
  • 如何在使用 Select 语句时转义 mysql 中的 value 关键字

    我在使用 Select 语句时遇到问题 其中列名称为 值 并且我想根据 值 列检索值SELECT and LIKE运营商 Code SELECT compo clecompo FROM compo compo ON compo clecom
  • 什么时候需要使用类型注释?

    在读的时候数据类型从 Rust Book 中我注意到有时变量是用类型注释定义的 有时则不是 我什么时候应该使用类型注释 let tup i32 f64 u8 500 6 4 1 let tup 500 6 4 1 let months Ja
  • 如何使用 flex json 序列化对象列表?

    我有一个如下所示的对象列表 List
  • 动态链接标签无法打开网站

    我最近开始使用动态组件 它工作得很好 直到我开始使用动态链接标签 所以这是我的问题 我想通过标签链接打开一个网站 但每次我尝试这样做时 它都会破坏程序并给出错误 System ComponentModel Win32Exception pr
  • JavaBean“useBean类属性classes.UserData的值无效”[重复]

    这个问题在这里已经有答案了 我有两个 JSP 和一个 JavaBean 无法正常工作 我使用的是Tomcat 6 0 第一个 JSP 是 GetName jsp 位于 C Tomcat webapps app1 GetName jsp
  • 从 python 启动 nano 作为子进程,捕获输入

    我试图从Python内部启动一个文本编辑器 nano 让用户输入文本 然后在写出后捕获文本 Control O 我没有与subprocess之前没有模块 也没有管道 所以我不知道下一步要尝试什么 到目前为止我有这个代码 a subproce
  • PDFBOX 具有粗体和普通文本的同一流

    好吧 我一直在使用 PDFBox 但我仍然完全不理解它 但我已经阅读了文档 使用字体和其他一些地方 但我找到了如何从 PDF 中获取文本 它是风格 但我正在创造它 而不是阅读它 我正在尝试做点什么 Like 这 在同一行上有粗体和普通文本
  • 检查 C 中文件是否存在的最佳方法是什么?

    有没有比简单地尝试打开文件更好的方法 int exists const char fname FILE file if file fopen fname r fclose file return 1 return 0 查找access 函数
  • 映射多对多关系

    我在让实体框架处理数据模式中的多对多关系时遇到一些问题 这是我的模型 public class User public int UserId get set public int Username get set public IEnume
  • 我如何找到哪个域从我的服务器请求 iframe 并将域保存在数据库上

    我有一组不同的网站请求iframe由于各种原因从我的服务器上删除了 html 文件 是否可以追踪onload哪个域请求iframe然后将其保存到数据库中 如果该域已存在 则不要将其添加到数据库中 请求 iframe 内容的不是域 而是用户的
  • sqlite 日期排序

    我正在将文件解析到 sqlite 数据库中 其中包含 YYYY MM DD 格式的日期 我想将条目存储到 sqlite 中 以便我可以按日期对条目进行排序 字符串不切割它 在 sqlite 中存储和排序日期的正常协议是什么 应该将日期转换为
  • 舍入错误?

    在我的课程中 我被告知 连续值在内存中近似表示 因此使用浮点数进行计算会涉及舍入误差 这些是位模式中的微小差异 因此测试e f是不安全的 如果e and f是花车 参考Java 这是真的 我使用了比较语句doubles and floats
  • 我可以在 Pool.imap 调用的函数中使用多处理队列吗?

    我正在使用 python 2 7 并尝试在自己的进程中运行一些 CPU 繁重的任务 我希望能够将消息发送回父进程 以使其了解进程的当前状态 多处理队列似乎对此很完美 但我不知道如何让它工作 所以 这是我的基本工作示例 不使用队列 impor
  • 为什么有界类型参数会出现“java.lang.ClassCastException:[Ljava.lang.Object;无法转换为”错误,而形式类型参数则不会?

    由于 java 没有通用数组 因此我使用将对象数组转换为类型参数的常规技巧 当我有一个像这样的正式类型参数时 这工作得很好
  • cumsum() 从最后一个条目开始向后移动

    我想计算从最后一个值开始向后移动的数字向量的累积和 标准cumsum R 中的函数通常从第一个值开始并向前移动 如简单的示例所示 cumsum 1 5 1 3 6 10 15 但我想要一个像这样的结果 15 14 12 9 5 有没有R函数
  • mysql 中每组的行数

    我想根据这种情况生成查询结果 可以根据crew id和类型创建行号 id crew id amount type 1 4 1000 AUB 2 4 1500 AUB 3 5 8000 CA 4 4 1000 CA 5 5 1000 AUB
  • 空传播替换空检查先验条件语句

    看到一个类似的问题 我想知道以下表达式是否 if attribute null attribute Description input 与以下零传播变体的行为 几乎 相同 if attribute Description input 到目前