如何在 C# < 6 中模拟 C# 6 null 条件

2023-11-22

使用 C# 6.0 我可以做到这一点

var isEqual = x.Id == y.Id
              && x.UpdatedAt == y.UpdatedAt
              && x.Name == y.Name                        
              && x.RulesUrl == y.RulesUrl
              && x.OngoingChallenges?.Count == y.OngoingChallenges?.Count
              && x.MembershipIds?.Count == y.MembershipIds?.Count;

有没有什么好的解决方案可以用 C#

我的意思是这部分

&& x.OngoingChallenges?.Count == y.OngoingChallenges?.Count
&& x.MembershipIds?.Count == y.MembershipIds?.Count;

因为在旧项目中我们不可能使用 C# 6.0。怎么写isEqual有效率的?


x.OnGoingChallenges?.Count相当于x.OnGoingChallenges != null ? x.OnGoingChallenges.Count : default(int?)(还有其他方法,但最终有一个空检查的快捷方式,称为空条件运算符).

也就是说,您的代码不能用语法优雅的陈述没有 C# 6,但您可以使用扩展方法模拟这个新的 C# 6 功能...

public static class StructExtensions
{
    // Check that TProperty is nullable for the return value (this is how C#6's
    // null-conditional operator works with value types
    public static TProperty? GetOrDefault<TObject, TProperty>(this TObject someObject, Func<TObject, TProperty> propertySelectionFunc)
        where TObject : class 
        where TProperty : struct
    {
        Contract.Requires(propertySelectionFunc != null);

        return someObject == null ? default(TProperty?) : propertySelectionFunc(someObject);
    }
}

现在 C#5 中的代码将如下所示:

var isEqual = x.Id == y.Id
                          && x.UpdatedAt == y.UpdatedAt
                          && x.Name == y.Name                        
                          && x.RulesUrl == y.RulesUrl
                          && x.OngoingChallenges.GetOrDefault(c => c.Count) == y.OngoingChallenges.GetOrDefault(c => c.Count)
                          && x.MembershipIds.GetOrDefault(m => m.Count) == x.MembershipIds.GetOrDefault(m => m.Count);

整个扩展方法将用于获取值类型的属性值或其默认值。您可能会也可能不会扩展扩展方法类以支持获取引用类型值或 null。

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

如何在 C# < 6 中模拟 C# 6 null 条件 的相关文章

  • Boost 错误代码参考

    有谁知道在哪里可以找到升压错误代码的参考 特别是 异步套接字处理程序返回的错误代码 Google 和 grep 头文件已调为空 我从 Linux 上的 asio error hpp 中提取了错误值 顺便说一句 我仅使用标头 asio 而不是
  • 插入多重集中:在该值第一次出现之前而不是最后一次出现之后

    正如标题所示 multiset 在所有相同值的范围末尾插入一个值 例如 在多重集中插入 21 2 2 3做到了1 2 2 new 2 3 如何在所有相同值的范围开头插入新值 例如 在多重集中插入 21 2 2 3应该使1 new 2 2 2
  • OpenSSL:RSA 加密/解密、密钥生成和密钥持久性

    我正在尝试构建一个需要以下内容的 p2p 应用程序 在 OpenSSL 中使用 RSA Encryption Decryption Generating Keys done Saving and loading keys done Savi
  • Cocoa 常量名称中的“k”代表什么[重复]

    这个问题在这里已经有答案了 可能的重复 Apple 的 API 中的 k 前缀表示什么 https stackoverflow com questions 675816 what does the k prefix indicate in
  • 动态库使用静态库,出现未定义的符号

    我一直在寻找解决问题的方法 只是得到了一些线索 但我找不到任何一致的解决方案 我有一个动态库 libdyna so 的代码 它使用3个静态库 libone a libtwo a lib Three a 和log4cpp库的功能 当我第一次构
  • Linq Any 始终返回 true

    我已经使用 Linq to Entities 多年 但这是我第一次遇到这个问题 我有Tips and Items表 每个提示可以有很多项目 我的数据库中只有 3 个项目 编辑项目时 我想确保GivenId对于具有相同提示的项目 字段是唯一的
  • 使用 C 序列化 double 和 float

    如何在 C 中序列化双精度数和浮点数 我有以下用于序列化短整型 整数和字符的代码 unsigned char serialize char unsigned char buffer char value buffer 0 value ret
  • 带有成员 (operator[]) 函数的 invoke_result

    如何为成员函数正确调用invoke result 或者专门用于运算符成员函数 我试过std invoke result
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • 如何使用 CMake 链接多个库

    我有一些与 DCMTK 相关的代码 如果我从命令行使用 g 我可以成功构建并运行它 这是代码 include dcmtk config osconfig h include dcmtk dcmdata dctk h int main Dcm
  • 具有 Nhibernate 设计问题的领域模型

    我正在尝试进入 DDD with C 世界 我使用NHibernate作为我的ORM工具 因此尝试开发一个PI Persistence Ignorance 模型 但是 在我的一些实体 表示为 POCOS 中 我的属性设置器中有业务规则 例如
  • C#:如何计算纵横比

    我对编程比较陌生 我需要根据给定尺寸 例如 axb 计算纵横比 16 9 或 4 3 我如何使用 C 来实现这一点 任何帮助将不胜感激 public string AspectRatio int x int y code am lookin
  • 除非我在开​​始时声明变量,否则为什么会收到“错误未声明的标识符”?

    当我有以下情况时 include stdafx h include
  • 以 asp-for 作为参数的自定义 ViewComponent

    我想把这个包装起来
  • llvm clang 编译器上的dynamic_cast失败

    我看到一个奇怪的失败dynamic cast正在返回NULL在 clang 编译器上 但相同的代码可以在 gcc 环境下运行 您能否指出根本原因是什么 之间可能有什么区别dynamic cast关于 llvm 和 gcc 我正在使用两个编译
  • OpenFileDialog 中的多个文件扩展名

    如何在一组中使用多个文件扩展名OpenFileDialog 我有Filter BMP bmp GIF gif JPG jpg PNG png TIFF tiff 我想创建组 以便 JPG 为 jpg 和 jpeg TIFF 为 tif 和
  • boost::bind 会导致开销吗?

    我目前正在从事网络软件方面的工作 它有一个主要类 server这显然代表一个服务器实例 A server实例可以发送请求 并通过回调通知用户响应 代码如下 class server public typedef boost function
  • TPL架构问题

    我目前正在开展一个项目 我们面临并行处理项目的挑战 到目前为止没什么大不了的 现在来说说问题 我们有一个 ID 列表 我们定期 每 2 秒 为每个 ID 调用一个 StoredProcedure 需要单独检查每个项目的 2 秒 因为它们是在
  • 找出用户属于哪些组

    我有一个刚刚创建的 Windows 用户帐户 以 XYZ 为例 此 XYZ 属于我在计算机管理 gt 本地用户和组中创建的用户组和自定义组 因此 在属性中我看到该用户属于 2 个组 现在我想获取这些组并显示它们 有什么建议么 我已经这样做了
  • 系统.安全.加密与 PCLCrypto

    我们正在删除系统中的许多共享功能并将其移植到 PCL 库中 我在使用 PCLCrypto 时遇到问题 我正在获取数据库中的一些现有数据 并尝试使用相同的算法对其进行解密 我得到了值 但末尾有 16 个额外字节 这些字节都是垃圾 参见下面的代

随机推荐

  • 有没有一种快速方法可以检查 Clojure 函数中的 nil args?

    在菲尔 哈格尔伯格的著作中 技术占卜 抱怨文件他对 Clojure 做了如下描述 nil 无处不在 并且会导致难以找到源头的 bug 现在 Phil 是一个聪明的人 他为 Clojure 社区做出了很多贡献 每个人都使用他的东西 所以我认为
  • 如何根据色标对 voronoi 进行着色?以及每个单元格的面积

    是否可以上色scipy spatial Voronoi图表 我知道它是 但现在我的目标是根据色标对每个单元格进行着色以表示物理量 如下图所示 PRL 107 155704 2011 我还想知道是否可以计算每个单元格的面积 因为这是我想计算的
  • MongoDB 如何处理并发更新?

    我开始在工作中使用 MongoDB 到目前为止一切顺利 我想知道 MongoDB 如何处理并发更新 我读到 MongoDB 中没有锁定功能 所以我想知道处理这个问题的常见做法是什么 Thanks MongoDB 使用进程范围的写锁来保证一次
  • 一页中包含多个 Facebook、Twitter 共享按钮,并带有自定义图像和标题

    我正在创建一个博客 其中登陆页面默认会显示 5 篇最新帖子 并且每篇帖子上都会有一个 Facebook 和 Twitter 分享按钮 我需要每个共享按钮都附加一个默认标题 描述和图像 并且我使用打开的图表来附加数据 问题是如何为每个共享按钮
  • Android:如何像联系人应用程序中那样使用字母索引器和快速滚动填充 ListView?

    我想实现一个带有 fastscroll 和 albhabet 索引器的 ListView 就像在联系人应用程序中一样 我正在使用 SimpleAdapter 来填充 ListView 从图中可以看出 通过从右侧的字母索引器中选择一个字母 l
  • Kotlin:coroutineScope 比 GlobalScope 慢

    我正在学习协程 并且遇到了以下令人惊讶的 对我来说 行为 我想要一张平行地图 我考虑了4种解决方案 Just map 无并行性 pmap from here 修改第2项 我删除了coroutineScope并使用GlobalScope Ja
  • “将密码显示为文本”控件

    我有一个常用的登录表单 由两个输入字段组成 一个用于登录 一个用于密码 我目前正在尝试添加一个控件 它将输入的密码显示为纯文本 以便用户可以检查它是否有拼写错误 我见过几种不同的方法来完成这项任务 包括this one 但它们仅在输入密码时
  • 在 Java 应用程序中读取 XML 文件的最佳/最简单方法是什么? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 目前 我们的 Java 应用程序使用制表符分隔的 cfg 文件中保存的值 我们需要更改此应用程序 以便它现在使用 XML 文件 为了从此文件中读取值
  • JWT 令牌接受的最大过期时间是多少

    我想知道我可以设置 JWT 令牌过期的最大值是多少 Thanks 没有关于过期时间的规定 这主要取决于令牌使用的上下文 RFC7519 第 4 节 JWT 必须包含才能被视为有效的声明集取决于上下文 并且超出了本规范的范围 因此 您可以认为
  • 如何使用 spring-data 在 mongodb 中创建全文搜索查询?

    我在 java 或 kotlin 上有 spring data mongodb 应用程序 需要通过 spring 模板创建对 mongodb 的文本搜索请求 在 mongo shell 中它看起来像这样 db stores find tex
  • Azure 函数的模拟 BlobClient

    我有一个具有 Blob 触发器的 Azure 函数 在我的函数方法参数中 我通过 BlobClient 公开 Blob 本身以及上传 的文件的名称 FunctionName MyFunc public async Task RunAsync
  • PHP 中是否记录了这种对 exit 和 die 的特殊处理?

    我刚刚读过该页面表达式在 PHP 文档中 在顶部它说 定义表达式的最简单但最准确的方法是 任何具有值的东西 这个简单的定义包括所有函数和大多数语言构造 但是有一些语言构造明确声明它们不返回值 以下是确实返回值的语言结构的列表 empty e
  • 如何在 matplotlib 中使用 Font Awesome 符号作为标记

    是否可以在 matplotlib 中使用字体精美的图标作为散点图中的标记 或者是否可以将其用作字体并将图标作为 文本 This question has originally been asked here but has been clo
  • Python解析括号内的块

    Python 中解析匹配括号中包含的文本块的最佳方法是什么 a b c 最初应该返回 a b c 将其作为输入应该返回 a b c 应该返回 c c 或者这个 pyparsing 版本 gt gt gt from pyparsing imp
  • Apache Solr 中的外部文件字段

    我一直在尝试使用 ApacheSolr 中的ExternalFileField 进行外部评分 我正在使用示例配置 基本上我想使用它们的 id 为项目设置分数 我在 schema xml 中设置了 fieldType idRankFile 和
  • 增量本地化如何运作?

    我正在尝试构建我的第一个本地化应用程序 我使用 NSLocalizedString 翻译了代码中的所有字符串 用于genstrings工具 现在我遇到了ibtool 增量本地化如何运作 关于手册页 我应该写这样的内容 ibtool prev
  • 使用命名参数格式化 Lisp 字符串

    Lisp 有没有办法使用命名参数来格式化字符串 也许与关联列表类似 format t All for who a and who a for all who one 为了打印 All for one and one for all 如同这个
  • OpenID Over SSL 并带有自签名证书

    我在我的个人服务器上设置了自己的开放 ID 提供程序 并在我的 apache 配置文件中添加了到 https 的重定向 当不使用安全连接时 当我禁用重定向时 我可以正常登录 但使用重定向时 我无法登录并显示以下错误消息 底层连接已关闭 无法
  • 错误 415 不支持的媒体类型:如果是 JSON,则 POST 无法到达 REST,但如果是 XML,则可以

    我实际上是 REST WS 的新手 但我真的不明白415 Unsupported Media Type 我正在 Firefox 上使用 Poster 测试我的 RESTGET对我来说效果很好 也POST 当它是一个application x
  • 如何在 C# < 6 中模拟 C# 6 null 条件

    使用 C 6 0 我可以做到这一点 var isEqual x Id y Id x UpdatedAt y UpdatedAt x Name y Name x RulesUrl y RulesUrl x OngoingChallenges