c# - C# Language Specification 是否明确规定比较必须是同一类型?

标签 c# specifications comparison-operators restrictions

在搜索“C# Language Specification, Version 5.0”的各种术语时,似乎没有明确声明比较的 LHS 和 RHS 必须是同一类型,或者能够显式转换,或者通过强制类型转换可以显式转换。

搜索的词和短语包括转换、转换、隐式、显式、if 语句,等等

凭直觉,人们不会将苹果与橙子进行比较;不管怎样,令人惊讶的是(对我来说),据我所知,这在 C# 语言规范中没有明确说明。

最佳答案

Does the C# Language Specification explicitly state that comparison must be of the same type?

没有。比较运算符 -- < <= > >= == != -- 两边不需要有相同类型的操作数。事实上,操作数不需要有类型。 foo >= null是完全合法的,但是 null没有类型。

Intuitively, one does not compare apples to oranges; regardless, surprisingly (to me), AFAIK this is not explicitly stated in the C# Language Specification.

直觉上人们是否希望能够将整数与短裤、短裤与小数进行比较,等等?人们是否期望能够将可为空的整数与整数进行比较?如果经理是一种人,那么能够问“这个经理和这个人是同一个人吗?”是否有意义?我认为比较运算符的操作数不需要是同一类型,无论是在编译时还是在运行时,这在直觉上都是显而易见的。

关于c# - C# Language Specification 是否明确规定比较必须是同一类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34073222/

相关文章:

c# - Azure Active Directory注销或清除 native 应用程序的 token 缓存

c# - 更改 EntityFramework 中的实体

c# - 从文本文件中选择特定行并将该行拆分为数组

ruby - 动态 RSpec 规范生成

c - for 循环不工作 - 外循环不迭代

c# - 部分 View 上的 mvc4 分页

security - 为什么 RFC 6797 禁止通过纯 HTTP 响应发送 Strict-Transport-Security header ?

javascript - 为什么 false++ 在 Firefox 中产生 SyntaxError 而在 Chrome 中产生 ReferenceError?

c++ - 将 shared_ptr 与自定义相等运算符和 STL 结合使用时出现问题

python - 为什么 "not(True) in [False, True]"返回 False?