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

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(使用前将#替换为@)

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

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 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 到目前