c# 9.0 记录 - 反射和通用约束

关于新记录功能的两个问题:

  1. 如何使用反射识别记录?看[这里][1]也许那里 是一种检测 EqualityContract 的方法,但我不确定这是否可行?

  2. 是否可以有一个通用类型是记录的通用约束?也就是说,是否可以使用约束指示类型参数 T 必须是记录类?

最佳答案

  1. How do I recognize a record using reflection ?

如果您尝试在 sharplab.io 中记录类(class)您会看到记录类是实现 IEquatable<T> 的常用类接口(interface)并包含用于比较和克隆记录类实例的其他成员。没有特殊属性表明该类是 record class .

所以我猜测没有办法使用反射来确定一个类是否是记录类。

looking here maybe there is a way to detect the EqualityContract but I am not sure if that is the way to go ?

如果一个类具有这样的属性,可以使用反射来确定,但这并不能100%保证具有该属性的类是一个记录类。


  1. Is it possible to have a generic constraint that a generic type is a record ? that is if it is possible to indicate that type parameter T must be a record class using a constraint ?

这是不可能的。

  1. Records proposal page不包含任何有关指定泛型类型参数的信息 T必须是记录类。
  2. 如果您阅读此 comment 下的讨论在 Champion records页面,您将了解到无法指定类似 where T : record 的内容在 C# 9 .此外,我们计划在 C# 10 中消除记录和类之间任何有意义的语义差异。 .这样记录的特征如with也将可用于类(class)。添加record约束将使这个目标无法实现。

https://stackoverflow.com/questions/63722177/

相关文章:

tensorflow - 如何将 tf.data.Dataset 与 kedro 一起使用?

flutter - 如何在Flutter中实现模糊背景Bottom Modal Sheet?

r - 如何使用 igraph R 包比较两个图以识别两个图之间相同/不同边的数量

stripe-payments - Stripe Checkout session 后如何在发票上获

android - 分享内容 : Permission Denial when using Inte

python - 使用最佳学习率导致随机猜测的准确性

python - 雪花 Python Okta 连接

node.js - 安装react时npm启动问题,如何解决?

firebase - 如何在 flutter 中捕获 StorageException

java - .rsaEncryptionOAEPSHA256算法在iOS上与Java的兼容性