当前位置: 首页 > 编程语言 > C#

比较一个类的两个实例分享

时间:2023-04-10 23:44:27 C#

比较一个类的两个实例我有一个这样的类publicclassTestData{publicstringName{get;set;}publicstringtype{get;set;}publicList成员=新列表();publicvoidAddMembers(string[]members){Members.AddRange(members);我想知道是否可以直接与此类的实例进行比较并发现它们相同?机制是什么?我正在寻找类似if(testData1==testData2)//DoSomething如果没有,怎么做?你应该在你的类上实现IEquatable接口,这将允许你定义相等逻辑。事实上,您还应该覆盖Equals方法。publicclassTestData:IEquatable{publicstringName{get;set;}publicstringtype{get;set;}publicListMembers=newList();publicvoidAddMembers(string[]members){Members.AddRange(members);}//覆盖Equals成员方法,如果合适,它将调用IEquatable实现。publicoverrideboolEquals(Objectobj){varother=objasTestData;如果(其他==null)返回假;返回等于(其他);}publicoverrideintGetHashcode(){//提供自己的实现}//这是必须实现的方法以符合//IEquatable契约publicboolEquals(TestDataother){if(other==null){returnfalse;}if(ReferenceEquals(this,other)){returntrue;}//您也可以使用特定的StringComparer而不是EqualityComparer//查看具体的实现(StringComparer.CurrentCulture,ea)。如果(EqualityComparer.Default.Compare(Name,other.Name)==false){returnfalse;}...//要比较成员数组,您也许可以使用//[SequenceEquals][2]方法。但是,请注意[]{"a","b"}//不会被视为相等,因为[]{"b","a"}返回true;有三种方法可以将某些引用类型T的对象相互比较:使用IEquatable.Equals和object.Equals方法(仅适用于实现IEquatable的类型)使用比较运算符==此外,每种情况都有两种可能性:被比较对象的静态类型是T(或T的其他一些基类)被比较对象的静态类型是object你绝对需要知道的规则是:那么所有这些在实践中意味着什么?根据经验,您应该使用Equals检查相等性(根据需要覆盖IEquatable)并实施IEquatable以提供稍微更好的性能。在这种情况下,IEquatable.Equals应该以IEquatable.Equals结尾。对于某些特定类型(例如System.String),使用operator==也是可以接受的,但您必须注意不要进行“多态比较”。另一方面,即使您进行此类比较,Equals方法也能正常工作。您可以查看多态比较的示例以及它为何会成为问题。最后,永远不要忘记,如果您覆盖了object.GetHashCode,则还必须相应地覆盖object.GetHashCode。一种方法是实现IEquatablepublicclassTestData:IEquatable{publicstringName{get;set;}publicstringtype{get;set;}publicListMembers=newList();publicvoidAddMembers(string[]members){Members.AddRange(members);}publicboolEquals(TestDataother){if(this.Name!=other.Name)returnfalse;if(this.type!=other.type)返回false;//TODO:比较成员,如果不相同则返回false;否则返回true;}}if(testData1.Equals(testData2))//类是相同的你也可以只覆盖Equals(object)方法(来自System.Object),如果你这样做,你也应该覆盖GetHashCode,看这里你可以覆盖equals方法并在其中手动比较对象另请参阅有关重载equals()和运算符==的指南您需要定义规则以使对象A等于对象B,然后覆盖此类型的Equals运算符。http://msdn.microsoft.com/en-us/library/ms173147(v=vs.80).aspx首先很难定义平等,只有你能定义平等对你意味着什么它是否意味着成员资格相同的值或它们指向相同的位置。这是对比较两个引用类型实例的“最佳实践”是什么的讨论和回答?实现IEquatable接口。这定义了一个泛型方法,值类型或类实现该方法以创建特定于类型的方法来确定实例的相等性。更多信息:http://msdn.microsoft.com/en-us/library/ms131187.aspx我在这里看到了很多好的答案,但以防万一您希望比较工作如下if(testData1==testData2)//DoSomething而不是使用Equals函数,您可以覆盖==和!=运算符:以上是C#学习教程:比较一个类的两个实例共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——publicstaticbooloperator==(TestDataleft,TestDataright){boolcomparison=true;//进行所需的比较returncomparison;}publicstaticbooloperator!=(TestDataleft,TestDataright){return!(left==right);,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: