为什么 CompareTo 这么短地实现?

2024-04-15

考虑以下代码:

namespace ConsoleApplication1 {
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(100.CompareTo(200)); // prints -1
            Console.WriteLine(((decimal)100).CompareTo((decimal)200)); // prints -1
            Console.WriteLine(((short)100).CompareTo((short)200)); // prints -100
            Console.WriteLine(((float)100).CompareTo((float)200)); // prints -1
            Console.ReadKey();
        }
    } 
}

我的问题是,Int16 上的 CompareTo 方法返回 -1、0 和 1 以外的值是否有任何具体原因?

ILSpy显示它是这样实现的

public int CompareTo(short value)
{
    return (int)(this - value);
}

而该方法是这样在 Int32 上实现的

public int CompareTo(int value)
{
    if (this < value)
    {
        return -1;
    }
    if (this > value)
    {
        return 1;
    }
    return 0;
}

不同之处在于,对于short,结果不可能溢出。例如,short.MinValue - (short) 1仍然是负数 - 而int.MinValue - 1 is int.MaxValue.

换句话说,具体原因是你可以通过捷径逃脱short(没有双关语)而相同的快捷方式不适用于int。你绝对不应该require IComparable<T>.CompareTo http://msdn.microsoft.com/en-us/library/43hc6wht.aspx返回 -1、0 或 1 的实现。文档非常清楚,结果仅在负数、零或正数方面才有意义。

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

为什么 CompareTo 这么短地实现? 的相关文章

  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • idleTimeout 和 ShutdownTimeout 之间的区别

    我正在尝试放宽网站的会话过期策略 以便用户可以指定会话超时间隔 我需要弄清楚应该指定哪些网站相关设置 以免过多限制用户 例如 可能需要 1 天的间隔 我将使用门票来实现这一点 现在 我知道我可以在网站的 web config 文件中指定id
  • 有没有基于 WPF 的 Markdown 渲染器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我们有基于 WPF 的应用程序 我们有单独的字符串存储库 其中的文本在网络中进行编辑 在我们的 WPF
  • LinqToSql 声明和实例化 DataContext 最佳实践?

    设置 DataContext 以便在扩展 LinqToSql 类中轻松访问方面的最佳实践是什么 例如 我的 dbml 中有一个 User 实体 我想向该类添加方法 如下所示 Partial Public Class User Public
  • C# 如何使用 CallNtPowerInformation 和 Interop 来获取 SYSTEM_POWER_INFORMATION

    我正在尝试编写一个小程序 该程序作为服务运行并监视用户是否处于活动状态 如果用户空闲 没有鼠标 键盘 一个小时 则某些进程将被终止 如果用户使用 user32 dll 中的 LASTINPUTINFO 运行它 它就可以工作 但它不能作为服务
  • 在 Azure 上运行 .NET 应用程序

    我拥有在 Amazon EC2 上运行应用程序的丰富经验 它需要一台低端服务器 我目前为该服务器支付大约 90 美元 月 是的 我知道我并不真正需要可扩展性 但我仍然使用 EC2 我想知道将这个纯粹的 NET 应用程序迁移到 Microso
  • default(CancellationToken) 如何有对应的 CancellationTokenSource

    当我创建默认值时CancellationToken我可以在调试器中看到CancellationToken has a CancellationTokenSource与其关联的存储在私有中m source field 我想知道对于结构来说怎么
  • 生成逗号分隔值

    假设我有一个字符串集合 foo bar xyz 我想从列表中生成一个逗号分隔的值 如下所示 foo bar xyz 请注意末尾缺少 我知道有多种方法可以生成此内容 使用 for 循环和 string Format 或 StringBuild
  • Asp.net core默认路由

    简化版Startup code public void ConfigureServices IServiceCollection services services AddMvc public void Configure IApplica
  • MSChart 控件中的自定义 X/Y 网格线

    我有一个带有简单 2D 折线图的 C Windows 窗体 我想向其中添加自定义 X 或 Y 轴标记 并绘制自定义网格线 例如 以突出显示的颜色 虚线 我查看了 customLabels 属性 但这似乎覆盖了我仍然想显示的默认网格 这是为了
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • MVC2 中隐藏字段的替代方案

    我有一个 viewModel 其中包含一个在传递给部分视图之前填充的字符串 我需要能够在发布表单时取回数据 目前我已经创建了一个隐藏字段并将数据绑定到它 然后 当回发时 我可以从表单集合中获取数据 这并不完全是我想要的 我希望数据完全隐藏在
  • 在 .Net 应用程序中使用 Active Directory Web 服务

    我正在尝试构建一个 Net 应用程序来询问 Active Directory 编辑 我需要使用 Web 服务来执行此操作 因为我将使用需要使用 Web 服务的第三方工作流工具从 Sharepoint 工作流与 AD 进行通信 根据我的研究
  • 如何在没有 Startup 类的情况下以编程方式启动 .NET 6 最小 API

    我正在尝试对我们的提供商项目实施 PactNet 合同测试 然而问题是 我们使用的是 Minimal API 因此我们没有将 Startup cs 和 Program cs 类全部整合到一个 Program cs 中 这提出了一个问题 因为
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式

随机推荐

  • 拥有两个具有双射行对应关系的 SQL 表是一个好习惯吗?

    我有一个任务表 id name 1 brush teeth 2 do laundry 和状态表 taskid state 1 completed 2 uncompleted 表之间存在双射对应关系 即 中的每一行task表恰好对应于中的一行
  • Couchbase 和 Spring 查询错误:“返回原始类型的查询预计返回 1 个结果,得到 X”

    In our spring boot 2 0 4 RELEASE应用程序 我们正在使用Couchbase version 5 5 1 build 3511 with Spring 我们在 Repository 接口中添加了一个新的删除方法
  • 如何从 Symfony 的 DomCrawler 组件获取更新的 HTML?

    我正在使用 Symfony 的 DomCrawler 组件 我已经成功检索节点 添加和修改 HTML 但是 我不确定最后如何实际获取 HTML 我试图获取 DomCrawler 更改后的 HTML 字符串 但我不知道该怎么做 没有魔法 to
  • 为什么编译超过 100,000 行的 std::vector::push_back 需要很长时间?

    我正在编译一个 C 库 它定义了一个从一组数据点中随机采样的函数 数据点存储在std vector 有 126 272std vectorPush back 语句 其中所讨论的向量的类型double 编译需要很长时间 为什么这需要这么长时间
  • 如何使用 JSON URL

    我有一个 JSON 对象 看起来像这样 以下链接是假的 results urlStuff pic url http www youtube com inside kslkjfldkf 234 jpg v 7475646 other pic
  • 如何创建一个全局的、可变的单例?

    创建和使用系统中只有一个实例化的结构体的最佳方法是什么 是的 这是必要的 它是 OpenGL 子系统 制作它的多个副本并将其传递到各处会增加混乱 而不是缓解混乱 单例需要尽可能高效 似乎不可能在静态区域上存储任意对象 因为它包含Vec与析构
  • UWP 中的串行设备通信问题

    我有一个特殊的问题 我正在尝试与 UWP 项目中需要串行通信的外围单元进行通信 我在用Windows Devices SerialCommunication 为了演示目的 我创建了一个新页面 其中有两个按钮 以及两个不同的单击处理程序 一个
  • Google 云存储 - 权限不足

    这个问题似乎与另一篇文章相似 但对我来说不同 因为我检查了testIamPermission 回报显示我获得了所需的所有许可并且仍然收到权限不足 这是我收到的 storage buckets get true storage buckets
  • 从抽象父类调用通用类型列表上的方法

    这是我当前的类型层次结构 我正在尝试实现一种方法PlaneRegion这将调用一个名为的方法Shift 在其派生类的列表上 其中该列表在所有列表中都称为 PlaneBoundaries 但它们具有不同的类型 like so public a
  • 如何在 Tensorflow 2.0 中使用嵌入投影仪

    随着 tf contrib 模块从 Tensorflow 中消失 并且 tf train Saver 也消失 我无法找到一种方法来存储一组嵌入及其相应的缩略图 以便 Tensorboard Projector 可以读取它们 The 张量板文
  • 与编程语言/API 相关的常用“语义”的简单定义?

    今天我突然想到 虽然我在提到语言元素和命名约定时已经采用并且不经常使用 语义 一词 但我对正式定义没有任何感觉 我试图在编程领域找到一个正式的定义 http en wikipedia org wiki Formal semantics of
  • 为什么鼠标滚轮事件的目标属性与其他(click、mousedown、touchstart)事件的目标属性不同?

    鼠标滚轮事件target属性提供在操作鼠标滚轮 或支持手势的触摸板 时鼠标当前悬停在其上的 DOM 元素 当我这样做时 至少在 Safari 6 中 我稍后会测试其他浏览器 我将得到文本节点本身target 即使我直接在文本上执行操作 其他
  • 首先是 DDD 数据库。如何处理聚合

    我正在尝试学习 DDD 的概念 我做了一个项目 我使用数据库优先方法 在基础设施中 我添加了一个 edmx 文件 我选择自动生成实体 现在在 域 中我正在尝试创建聚合 但在这里我遇到了一些问题 我正在尝试创建一个名为 User 的聚合 但
  • 如何为这个业务逻辑代码编写可靠的单元测试?

    我有一些想要测试的业务逻辑代码 目前我只知道如何对没有其他依赖项的逻辑代码编写单元测试 有人能给我指出如何测试这个函数的好方向吗 也许可以举个例子 测试这个的唯一方法是集成测试还是我必须使用模拟 存根
  • 安装旧版本的 gcc [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我想在我的 Ubuntu 64 位系统上安装 gcc 4 1 2 该系统当前有 gcc 4 4 我想继续使用当前的 gcc 但也想添加 gcc 4 1
  • Swagger - 时间戳奇怪的表示

    我有 Spring Boot 控制器 为了方便 API 参考 我使用了 Swagger 关于问题timestamp 为什么在生成的文档示例中看起来像 timestamp date 0 day 0 hours 0 minutes 0 mont
  • UWP 网格填充父窗口

    我们正在进行一个学校项目 但陷入了死胡同 我们正在努力使grid填充整个父窗口 但我们根本无法这样做 This is what the designer shows and how we want it to look And this i
  • 如何从 Twitter Bootstrap 和 Bloodhound 建议中获取 id 和 value?

    选择建议时如何从 typeahead js 获取 id 和 value 我有一个 json 如下 id 1 name paul id 2 name jim id 3 name tom id 4 name medor id 5 name ja
  • Maven jdepend 循环构建失败

    当包循环存在时 有没有办法使用 maven 中的 jdepend 插件来使构建失败 我知道你可以用 ant 很容易地做到这一点 但我还没有弄清楚如何用 Maven 做到这一点 谢谢 杰夫 根据已接受的答案 我改进了性能和日志输出 并将其发布
  • 为什么 CompareTo 这么短地实现?

    考虑以下代码 namespace ConsoleApplication1 class Program static void Main string args Console WriteLine 100 CompareTo 200 prin