C#比较

【使用C#进行比较操作】——一种简单而强大的比较方法 本文介绍了在C#中进行比较操作的常见方法,包括基本类型的比较、字符串比较和自定义比较器。通过这些方法,我们可以轻松地判断两个值之间的大小关系,并根据比较结果做出相应的处理。通过比较,我们可以判断两个值之间的关系,并根据结果做出相应的处理。本文将介绍C#中常用的比较方法,并给出相应的源代码和描述,帮助读者更好地理解和应用比较操作。在上述代码中,我们定义了两个变量a和b,并使用比较运算符来判断它们之间的关系。接口,并根据人物的年龄来进行比较。方法对两个字符串进行比较,并根据比较结果输出相应的提示信息。 阅读详情

初学C#,此文章意在记录学习心得

C#是如何比较的,首先看如下程序,p1和p2是两个不同的引用,所以第一次比较输出no same。

p1和p3引用同一段内存空间,所以第二次比较输出same。

    class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person { name = "SLH" };
            person p2 = new person { name = "SLH" };
            person p3 = p1;
            if (p1 == p2)
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");
            Console.WriteLine("!-********************-!");
            if (p1 == p3)
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");
            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
    }

第二段程序使用Equals进行比较,结果相同

class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person { name = "SLH" };
            person p2 = new person { name = "SLH" };
            if (p1 .Equals (p2 ))
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");
            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
    }

第三段程序我们在person类中重写了Equals()方法,通过person类型的name属性来比较两个person对象是否相同,结果输出same

class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person { name = "SLH" };
            person p2 = new person { name = "SLH" };
            if (p1 .Equals (p2 ))
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");
            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
       
public override bool Equals(object obj)
        {
            return this.name .Equals(((person )obj).name );
        }

    }

那么我们如何比较person类型的数组呢,看下面程序,执行结果no same

class Program
    {
        static void Main(string[] args)
        {
            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                               };
            person[] persons2 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                               };
            if (persons1 != persons2)
                Console.WriteLine("no same");
            else
                Console.WriteLine("same");

            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
        public override bool Equals(object obj)
        {
            return this.name.Equals(((person)obj).name);
        }
    }

c#数组显式实现了IStructuralEquatable接口,使用时需要把数组强制转换为该接口,这个接口用于比较两个数组是否内容相同,例程如下。

IStructuralEquatable接口定义了Equals()方法,方法需传入两个参数,第一个参数为另一个数组,object类型,

第二个参数为IEqualityComparer类型,可以通过EqualityComparer<T>类型的Default属性返回IEqualityComparer接口的一个默认实现,就可以定义如何进行比较了

当然person类中还需重写Equals()方法,程序执行结果为same

使用IStructuralEquatable接口需引用System.Collections命名空间

 

class Program
    {
        static void Main(string[] args)
        {
            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                               };
            person[] persons2 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                               };
   
        if (((IStructuralEquatable)persons1).Equals(persons2, EqualityComparer<person>.Default))
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");

            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
        public override bool Equals(object obj)
        {
            return this.name.Equals(((person)obj).name);
        }
    }

此时修改persons2数组,程序运行结果为no same

            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}                              
                               };
            person[] persons2 ={
                                   new person (){name ="Tom"},
                                   new person (){name ="Jackson"}
                               };

修改persons2数组,程序运行结果no same

            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                                   
                               };
            person[] persons2 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"},
                                   new person (){name ="SLH"}
                               };

修改persons2数组,程序运行结果no same

            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                                   
                               };
            person[] persons2 ={
                                   new person (){name ="Jackson"},
                                   new person (){name ="SLH"}
                                   
                               };


由Default属性返回的IEqualityComparer接口的默认实现,首先检查person类型是否实现了IEquatable <T>接口,如果实现了,就调用IEquatable.Equals()方法,

如果没有实现,就调用Object.Equals()方法,看下面程序A与程序B

程序A,运行结果

IEquatable
no same

class Program
    {
        static void Main(string[] args)
        {
            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}          
                               };
            person[] persons2 ={
                                   new person (){name ="Jackson"},
                                   new person (){name ="SLH"}                                 
                               };
            if (((IStructuralEquatable)persons1).Equals(persons2, EqualityComparer<person>.Default))
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");

            Console.ReadLine();
        }
    }
    class person
:IEquatable <person >
    {
        public string name;
        public override bool Equals(object obj)
        {
            Console.WriteLine("Equals");
            return this.name.Equals(((person)obj).name);
        }

        public bool Equals(person other)
        {
            Console.WriteLine("IEquatable");
            return this.name.Equals(other.name);
        }

    }

程序B运行结果

Equals
no same

 

 class Program
    {
        static void Main(string[] args)
        {
            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                                   
                               };
            person[] persons2 ={
                                   new person (){name ="Jackson"},
                                   new person (){name ="SLH"}
                                   
                               };
            if (((IStructuralEquatable)persons1).Equals(persons2, EqualityComparer<person>.Default))
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");

            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
        public override bool Equals(object obj)
        {
            Console.WriteLine("Equals");
            return this.name.Equals(((person)obj).name);
        }
    }

当然我们也可以不使用EqualityComparer<T>类型的Default属性返回的默认实现,如下程序定义了equalityComparer类,实现了IEqualityComparer接口

class Program
    {
        static void Main(string[] args)
        {
            person[] persons1 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                                   
                               };
            person[] persons2 ={
                                   new person (){name ="SLH"},
                                   new person (){name ="Jackson"}
                                   
                               };
            if (((IStructuralEquatable)persons1).Equals(persons2,
new equalityComparer () ))     //此处第二个参数传入equalityComparer类的匿名对象
                Console.WriteLine("same");
            else
                Console.WriteLine("no same");

            Console.ReadLine();
        }
    }
    class person
    {
        public string name;
        public override bool Equals(object obj)
        {
            Console.WriteLine("Equals-person");
            return this.name.Equals(((person)obj).name);
        }
    }
   
class equalityComparer :IEqualityComparer
    {

        public new bool Equals(object x, object y)     //执行if判断时,调用equalityComparer类的Equals()方法,此时传入的两个参数为person类型对象,调用person类型的Equals()方法

                                                                               //因为数组包含两个元素,所以会调用两次
        {
            Console.WriteLine("Equals-equalityComparer");
            return x.Equals(y);
        }

        public int GetHashCode(object obj)
        {
            return obj.GetHashCode();
        }
    }

程序运行结果:

Equals-equalityComparer
Equals-person
Equals-equalityComparer
Equals-person
same

比较C#代码文件 比较C#文件 比较C#代码 比较C#代码文件 比较C#文件 比较C#代码 部区分大小,空格,但是象引号==还是要区别的 立即下载

相关推荐

C#文本比较源代码

基于B/S架构完成两个字符串的比较,分为文本比较以及字符串比较两种。VS2010下的工程文件,基于WEB页的文本比较源码,不仅能够完成相似度的计算而且可以给出两个文本的对比差异并用不同颜色区分。 包含源码。

C#教程(6)———— 比较运算符与逻辑运算符

C#教程(6)———— 比较运算符与逻辑运算符,在之前的文章中,我们介绍了各种数学运算该怎么进行,而在数学中我们也常常会遇到比较大小的情况,比如期末考试考到80分以上就可以吃肯德基,那么今天我们就来探讨一下,计算机中如何比较两个数值的大小。

qq_41603300的博客 1819

C#.NET文件比较工具(含全部源代码)

.NET2.0 C#写的一个文件比较工具。可以比较文件和文件夹,支持拖放功能。操作方式效仿"Beyond Compare",界面用SyncFusion控件做的,淡蓝色界面。 (文件比较的算法是一个求公共最长字序列的算法,复杂度比较大,所以对大文件的处理效果不佳)

C#(二十五)之C#对象比较

(一):比较对象的方法 概念有点多,看看就行了: 1:ReferenceEquals: Object.ReferenceEquals(left, right)静态方法:从名称中便可知它用来比较两者是否是相同的引用,我们也永远不应该去重写该方法。它对于值类型对象的比较永远返回false;对于两个null的比较永远返回true。此方法必须使用类来调用。 cat f1 = new cat(5); cat f2 = new cat(5); // ReferenceEquals Console.WriteLine("

camellia的博客 2090

c#比较文件是否一致

c#比较文件是否一致(包括.txt,xml等各种类型的文件),这是个人验证过的,用到了哈希码算法,保证完整。

C#实现类型的比较示例详解

主要给大家介绍了关于C#实现类型的比较的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

C#中4种进行相等比较的方式

ReferenceEquals()方法 ReferenceEquals()方法是一个静态方法,用来测试两个引用符是否指向同一个对象,即两个引用符是否包含相同的内存地址。如果两个引用符指向同一个对象,方法返回true,否则返回 false。如果两个引用符的值都是null,也返回true。这种比较称为引用比较。 实例Equals()方法 在Object类中,实例版Equals()方法是一个虚...

qq_39972875的博客 1846

模糊控制——基本原理(附MATLAB程序)

模糊化:使用隶属函数将实际输入转换为模糊集合的隶属度值。规则库:利用“如果-那么”规则将模糊输入映射到模糊输出。推理机制:通过规则的模糊化和模糊集合的合成,生成模糊输出。去模糊化:将模糊输出转换为具体的控制信号,常用的方法包括质心法和最大隶属度法。这些步骤综合起来,实现了模糊控制系统对复杂和不确定系统的有效控制。模糊控制系统通过结合模糊逻辑和规则库来处理复杂系统中的不确定性和模糊性。它的核心在于模糊集合和隶属函数,通过推理机处理模糊规则,并最终通过去模糊化生成具体的控制信号。

qq_35623594的博客 5559

C#--比较

类型比较: 在比较对象时,常常需要知道它们的类型,这样才能确定是否可以进行值的比较. 方法一. 可以将GetType()方法和typeof()运算符一起使用,就可以确定对象的类型. 例子: int i = 10; if (i.GetType() == typeof(Int32)) { Response.Write("Type Of Int32");...

weixin_30907935的博客 107

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

Wider Face+YOLOV7人脸检测

使用Wider Face数据集训练YOLOV7

chen_znn的博客 8407

C#时间比较

1.C#时间的比较 C#时间比较大小方法一:时间与时间之间直接比较。 stringstrTime1=DateTime.Now.ToString(); stringstrTime2=DateTime.Now.AddDays(-1).ToString(); DateTimedt1=Convert.ToDateTime(strTime1); DateTimedt2=Convert.ToDa

Dhcc2013的专栏 1502

YOLOv8知识蒸馏实战:用BCKD和LD在自制数据集上分别提点1.63%和1.69%的保姆级教程

本文详细介绍了在YOLOv8模型上应用知识蒸馏技术(BCKD和LD方法)的实战教程,通过自制数据集实现性能提升1.63%和1.69%。内容涵盖环境配置、模型选择、BCKD和LD的具体实现及调参技巧,适合目标检测领域的开发者和研究者。

weixin_29082143的博客 245

C# 字符串比较

字符串比较

害怕也得前进 1万+

逆变器并联--下垂控制引入虚拟阻抗

说明传统下垂控制的缺点、分析虚拟阻抗的原理和实现方法

weixin_58670090的博客 1万+

windows 应用爬虫: exe自动操作

之前写了那么多关于手机和网页爬取,今天就写一期关于exe的爬取,exe的爬取其实也是类似的,一个方式是抓包,还有一个模拟人工界面获取元素数据。抓包肯定是最直接,数据也是最全的, 有些数据不一定会显示在界面上,或者必须通过一定交付方式,才能显示到页面(比如移动鼠标到具体元素上)。本文依旧采用python方式,先说说怎么通过界面方式驱动应用点击和数据获取。

youbingchen的博客 888

C++ 和 C# 之间的比较

下表包含 C++ 和 C# 功能之间的重要比较。如果您是一位 C++ 程序员,此表将为您提供这两种语言的最重要差异。有关详细信息,请使用链接浏览详细的主题。注意   C++ 和 C# 项目派生于不同的项目模型。有关 C++ 和 C# 项目之间差异的信息,请参见项目中的项管理和使用解决方案资源管理器。功能参考主题继承:类只能继承一个基类中的实现。另外,类或接口可以实现多个接口。class inter

chenkangli的专栏 1931

华为OD机试2025C卷 - 精准核酸检测 (C++ & Python & JAVA & JS & GO)

华为OD机试2025C卷 精准核酸检测,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解

qq_45776114的博客 1708

C#排序比较

与C#定义了相等性比较规范一样,C#也定义了排序比较规范,以确定一个对象与另一个对象的先后顺序。排序规范如下 IComparable接口(包括IComparable接口和IComparable&lt;T&gt;接口) &gt;和&lt;运算符 当需要实现排序算法时,使用IComparable接口。在下面的例子中,Array.Sort静态方法可以调用,是因为System.String类实现了IC...

weixin_34107739的博客 1352

飞牛fnNAS存储模式RAID 5数据恢复

中介绍了fnNAS存储空间的几个模式,细心的网友应该能感受到,我是非常推崇RAID 5的。但我认为,一般人出现1块硬盘损坏后,就能够赶紧采取处理措施了,再高的容灾等级也无法满足这个用户的需求了。》就完成了飞牛NAS存储空间的说明,包括了如何创建、怎么选择空间模式、RAID 5 硬盘故障后的更换、系统更换/重装后数据盘的恢复等等。在VMware中新建虚拟机,安装好fnNAS后,再向虚拟机添加“已有硬盘”(这就是所谓崩溃虚拟机的数据盘),此时新的fnNAS出现提示。在“选择要添加的硬盘”中,选择刚添加硬盘。

dgnankai的专栏 3010

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C#集合、比较、转换

框出的几个接口,在 System.Collections 命名空间下,这几个接口提供了,基本的集合功能。我将解释框柱的四个接口,后文会介绍其他的。C#中的集合一般用于处理对象列表,功能比简单的数组要多,功能大多数是通过System.Collection 名称空间中的接口而获得的。我们可以在对象浏览器中找到(快捷键 Ctrl+W+J)

猪猪的博客 1540

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[C#]DateTime时间大小的比较

C#实现DateTime时间大小比较的两种操作1. 直接比较stringstrTime1=DateTime.Now.ToString(); stringstrTime2=DateTime.Now.AddDays(-1).ToString(); DateTimedt1=Convert.ToDateTime(strTime1); DateTim...

weixin_34198797的博客 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

c#中的字符串的比较

 1、String  str1=TextBox1.Text.Trim();         String  str2=TextBox2.Text.Trim();  if   (str1.Equals(str2))     {       Response.Redirect("main_right.aspx");     }         2、string 的静态方法 Compare,Comp

沙漠飞鹰 3060

C# 日期比较 方法

use "DateTime.Compare" static method  DateTime.Compare( dt1, dt2 ) > 0 : dt1 > dt2  DateTime.Compare( dt1, dt2 ) == 0 : dt1 == dt2  DateTime.Compare( dt1, dt2 ) < 0 : dt1 < dt2      ///   /// C#日期比较计算两个日期的时间间隔          ///   /// 第一个日期和时间  /// 第二个日期和时间  ///

zth603的专栏 1万+

c#中字符串的比较

概要:本文所指字符串比较并非长度比较。1.c#字符串比较法则。2.部分c#字符串的比较方法 c#字符串比较法则 c#语言中使用一些方法对俩个字符串进行比较时,不是比较字符串的长度,判断两字符串的大小,主要遵循的法则是按照字典排序先后而进行比较。 比较两个字符串时,会将其每个字符进行逐个比较,如若相同则比较下一个,直到出现不同的字符或遇到\0为止。 比较英文字符串时所遵循,在字典中排序在后的单词大...

诡白丷的博客 3784

C# 自定义比较器

<br />                                                           C# 自定义比较器<br />在C#中,要比较两个数组,可以调用<br />System.Array.Sort(...)方法<br /> <br />有两种方式可以为自己的类提供排序;<br /> <br />1.类实现接口 IComparable<br />2.创建比较器类,该类实现接口IComparer<br /> <br />第二种方法的优点是,你可以在不修改已有的类,创建

4352
下一篇: LMI Gocator GoSDK C#开发学习笔记(一)
十里河畔
博客等级 码龄7年 53粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值