c# - 为什么我可以将枚举与 null 进行比较?
问题描述
根据 Microsoft 的文档,我可以将值类型与 null 进行比较,方法是将它们标记为可为空。这在嵌套对象中使用空传播时特别有用。
但是,当比较特定的枚举时,我认为是值类型,我仍然可以与 null 进行比较,如下所示:
public class NullColorComparer
{
public bool CompareNullWithColor()
{
// This return false.
return null == Color.Red;
}
}
public enum Color
{
Red,
Blue
}
为什么这行得通?编译不应该因类型错误而失败吗?
解决方案
枚举在比较之前被强制转换为它的可为空版本,因此它可以并且将评估。然而结果总是一样的。
这就是编译器警告您的原因:
警告 CS0472 表达式的结果始终为“假”,因为“颜色”类型的值永远不会等于“颜色”类型的“空”?
虽然比较没有用,但编译器不会阻止您执行它。就像它不会阻止您制作 aif(false) { }
一样,这同样没用。
推荐阅读
- typescript - react-native const undefined 中的打字稿使用
- css - 怎么改图标
在角材料中? - php - 无法获取按 sql 中的组行过滤的行
- android - 如何解决与 clang 相关的 gcc 或 g++ 错误?
- python - 私钥和密码的解密问题
- java - 动态规划算法的结果不正确
- android - 我使用 CameraX 捕获的每一秒图像都是无效的绿色背景图像
- android - Ionic Cordova 运行 Android 并...去商店?
- azure-ad-b2c - 是否有 AD B2C 与 Google Recaptcha V3 集成的示例
- node.js - 将consume.on('message,callback)放在另一个回调中时无法从头开始使用消息