list1.Sort((m, n) => m.Id - n.Id); id是double类型的为什么回报错

问题产生的地方

 

原因 

对于 double 类型的属性,不能直接使用减法运算符进行比较。减法运算符只能用于数值类型,而 double 是浮点数类型。

要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。

更改

要在 double 属性上进行排序,可以使用 CompareTo 方法或者使用自定义的比较器。下面是两种可行的方式:

1.使用 CompareTo 方法:

list1.Sort((m, n) => m.Id.CompareTo(n.Id));

使用了 CompareTo 方法来比较两个 double 值的大小

2.使用自定义的比较器:

public class DoubleComparer : IComparer<double>
{
    public int Compare(double x, double y)
    {
        return x.CompareTo(y);
    }
}

// 在排序时使用自定义的比较器
list1.Sort((m, n) => new DoubleComparer().Compare(m.Id, n.Id));

这种写法定义了一个名为 DoubleComparer 的自定义比较器类,实现了 IComparer<double> 接口的 Compare 方法。然后,在排序时使用新建的 DoubleComparer 实例来进行比较。

产生原因

如:list1.Sort((m, n) => m.Id - n.Id);id为double类型,为什么会报错无法将都变了隐式转换为int,为什么会报错无妨将lambda表达式转换成预期委托类型

List<T>Sort 方法的参数是一个委托,用于比较两个元素的大小关系,以实现排序功能。这个委托类型的声明如下:

public delegate int Comparison<in T>(T x, T y);

可以将 lambda 表达式中的 m.Id - n.Id 修改为一个返回整数类型的表达式,比如 (int)(m.Id - n.Id)。这样就可以将 lambda 表达式转换成预期的委托类型,从而成功地实现按照 Id 属性进行排序的功能。

list.Sort((m, n) => m.PositionX - n.PositionX);

 m.PositionX - n.PositionX的结果是一个double 需要强转成int ,但是强转的时候会造成精度丢失 如本来是0.3 会变成0导致认为mn是相等的所以保险起见还是用

list.Sort((m, n) => m.PositionX.CompareTo(n.PositionX));

CompareTo方法 

CompareTo() 方法是用于比较两个值的大小,并返回一个整数作为比较结果的表示。

CompareTo() 方法的返回值为整数,其含义如下:

  • 如果 x 小于 y,则返回一个负数(通常为 -1)。
  • 如果 x 等于 y,则返回零。
  • 如果 x 大于 y,则返回一个正数(通常为 1)。

返回一个整数的好处是可以更灵活地处理比较结果。通过比较结果的正负号,可以判断出两个值的相对大小关系,并进行相应的逻辑处理。

CompareTo 方法是 IComparable 接口的一部分,它定义了一个用于比较对象的方法。因此,只要类实现了 IComparable 接口,就会拥有 CompareTo 方法。

以下是一些常见的具有 CompareTo 方法的类:

  1. Int32Int64DoubleDecimal 等数值类型:这些数值类型都实现了 IComparable 接口,并且提供了 CompareTo 方法来比较它们之间的大小关系。
  2. String 类型:String 类型实现了 IComparable 接口,因此它也具有 CompareTo 方法,用于按照字典顺序比较字符串的大小。
  3. DateTime 类型:DateTime 类型也实现了 IComparable 接口,并提供了 CompareTo 方法,用于比较日期和时间。
  4. 用户自定义类:如果你在自己的类中实现了 IComparable 接口,并提供了 CompareTo 方法的实现,那么你的类也会具有 CompareTo 方法。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/290828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

iOS UITextField复制、粘贴框显示为英文如何解决

问题描述&#xff1a; 使用UITextField&#xff0c;欲粘贴文本&#xff0c;长按或者双击展示的提示框显示为英文 解决方案&#xff1a; 在Xcode配置文件info,plist文件中&#xff0c;新增Localizas属性&#xff0c;填入Chinese 结果如下&#xff1a; 提示框成功展示为中文

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -后端架构搭建

锋哥原创的uniapp微信小程序投票系统实战&#xff1a; uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

Android Framework | Linux 基础知识:入门指南

Android Framework | Linux 基础知识&#xff1a;入门指南 进行Android Framework开发需要具备基本的Linux基本知识&#xff0c;下面是一份Linux基础知识入门指南&#xff0c;希望对你有所帮助&#xff01; 1. 简介 Linux 是一种免费、开源的操作系统&#xff0c;它是由芬兰…

基于Java SSM框架实现固定资产管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现固定资产管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

【科研绘图】手把手教你Origin安装以及汉化,附带网盘链接

Origin安装 1.下载文件压缩包2.&#xff08;软件安装部分&#xff09;解压&#xff0c;以管理员身份运行&#xff0c;.exe&#xff0c;下一步3. &#xff08;软件设置部分&#xff09;打开软件无需更改&#xff0c;点OK4. &#xff08;破解部分&#xff09;&#xff0c;找到刚才…

基于gitlab 12.8.0版本的完整镜像过程

目前已在一台服务器上安装了gitlab 12.8.0&#xff0c;并且稳定运行了有几年了&#xff0c;其上面也创建了大量的项目。目前要求对该gitlab及其上面的所有仓库做一个完整的镜像。具体操作过程如下&#xff1a; 1、确认现有的gitlab的版本号 2、到gitlab官网下载相同版本号的gi…

生活中危险的气体:一氧化碳与二氧化碳中毒的症状及安全预防措施

一氧化碳和血红蛋白亲和力超过氧气&#xff0c;会占用血红蛋白&#xff0c;导致缺氧。 二氧化碳会和血浆结合&#xff0c;导致血液pH值不正常&#xff0c;抑制呼吸&#xff0c;导致窒息。 通俗点说&#xff1a;一氧化碳是中毒&#xff0c;二氧化碳则是窒息。 一氧化碳中毒 …

d3dcompiler_43.dll丢失怎么修复?怎么解决

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler_43.dll文件”。那么&#xff0c;d3dcompiler_43.dll是什么文件&#xff1f;它的作用是什么&#xff1f;如果缺失了该如何修复呢&#xff1f;本文将详细介绍d3dcompiler_…

一款神仙级SpringCloud微服务开源项目,接私活吊到不行!(附源码)

今天给大家推荐一个牛逼的接私活项目&#xff0c;SpringCloud微服务架构项目&#xff01; 一个由商业级项目升级优化而来的微服务架构&#xff0c;采用SpringBoot 2.7 、SpringCloud 等核心技术构建&#xff0c;提供基于React和Vue的两个前端框架用于快速搭建企业级的SaaS多租…

CDD文件的制作

CDD文件 1、核查诊断调查表2、制作CDD3、Diva测试 1、核查诊断调查表 ECU级别&#xff1a;包括文档相关、控制器的诊断ID和时间参数&#xff0c;支持的服务&#xff0c;DTC、DID、刷写流程。 2、制作CDD 2.1、cddt编辑思路&#xff08;每一步都要根据调查表进行操作&#xf…

【Netapp数据恢复】Netapp存储lun被删除如何恢复数据?

Netapp存储数据恢复环境&故障情况&#xff1a; 某单位一台Netapp存储&#xff0c;该Netapp存储内共有数十块SAS硬盘。 工作人员误操作删除了Netapp存储中12个lun&#xff0c;删除的数据包括客户信息和其他重要数据。 Netapp存储数据恢复过程&#xff1a; 1、将故障存储中所…

在Go语言中处理HTTPS请求

随着互联网的发展&#xff0c;安全性变得越来越重要。HTTPS作为安全的HTTP协议&#xff0c;已经被广泛使用。在Go语言中&#xff0c;处理HTTPS请求需要一些特定的步骤。本文将详细介绍如何在Go语言中处理HTTPS请求。 首先&#xff0c;确保你已经安装了Go语言的开发环境&#x…

【Python机器学习】评估模型

以鸢尾花数据为例&#xff0c;将测试数据中的每朵鸢尾花进行预测&#xff0c;并将预测结果与已知标签结果进行对比&#xff0c;可以计算精度来衡量模型的优劣。精度就是品种预测正确的结果占比。 import numpy as np from sklearn.datasets import load_iris from sklearn.mod…

炼石白小勇:免改造数据安全技术,破局信创安全升级难点

2023年7月13日&#xff0c;由中国计算机学会主办&#xff0c;中国计算机学会抗恶劣环境计算机专委会、江苏省企业联合会、江苏省互联网协会、中国计算机学会南京会员活动中心联合承办的“2023&#xff08;第六届&#xff09;CCF自主可控计算机大会”在江苏南京盛大开幕。本次会…

深度学习中的大模型「幻觉」问题:解析、原因及未来展望

如何解决大模型的「幻觉」问题&#xff1f; 什么是大模型「幻觉」 大模型幻觉是指在深度学习领域中&#xff0c;尤其是涉及大型神经网络时&#xff0c;模型展现出在理论上不应具备的性能或能力。这种现象可能导致误导性的结果&#xff0c;表现为在训练数据上过度拟合&#xff0…

无线温振传感器在石油石化行业设备状态监测的使用场景

石油石化行业作为全球能源供应的重要支柱&#xff0c;在生产和加工过程中依赖大量设备和机械设施。为了确保设备的正常运行和生产的连续性&#xff0c;设备状态监测显得尤为关键。无线温振传感器作为一种先进的智能传感技术&#xff0c;为石油石化行业设备状态监测提供了全新的…

FBL刷写

刷写 1、刷写需求的理解2、刷写流程2.1、预编程阶段&#xff1a;保证在编程阶段的动作能够正常操作&#xff0c;控制器给响应。整车功能不会出现问题 刷写某一控制器时&#xff0c;避免其他控制器集DTC,85控制DTC&#xff1b; 28 通信控制.保证总线负载率不要过高&#xff08;下…

死锁的处理策略“避免死锁”-第三十八天

目录 什么是安全序列&#xff1f; 不安全情况 安全情况 安全序列 系统的不安全状态 银行家算法 寻找安全序列 寻找不安全序列 代码实现 重点回顾 什么是安全序列&#xff1f; 偷图小能手 不安全情况 安全情况 安全序列 概念&#xff1a;指如果系统按照这种序列分配…

从零开始学习Nginx

下载 nginx下载地址&#xff1a;http://nginx.org/en/download.html 启动 双击nginx.exe。打开cmd命令窗口&#xff0c;切换到nginx解压目录下&#xff0c;输入命令 nginx.exe &#xff0c;回车即可 PS&#xff1a;如果安装目录是中文的情况&#xff0c;打开exe文件时会报…