【发布时间】:2022-01-04 08:33:44
【问题描述】:
我不经常使用。所以这就是我问这个问题的原因。
但显然在 C# 中不可能只与对象进行简单的比较。所以我当然先用谷歌搜索,但我只找到了非常多余的解决方案。而且我知道您可以通过 javascript 序列化对象,然后返回字符串,然后相互比较属性。
因为我只想比较两个简单的对象——如果属性的值相同的话。所以我有这个:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Person()
{
}
public bool IsEqualTo(Person compareTo)
{
return (FirstName == compareTo.FirstName && LastName == compareTo.LastName);
}
public static bool AreEqual<AnyType>(AnyType mass1, AnyType mass2) where AnyType : IComparable<AnyType>
{
return mass1.CompareTo(mass2) == 0;
}
public Person(string lastName, string firstName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
}
但是我不能像这样使用 AreEqual 方法:
var person = new Person("Niels","Engelen");
var person99 = new Person("Niels", "Engelen")
var equals = Person.AreEqual(person, person99);
所以:
var equals = person.CompareTo(person99);
这当然行不通。
那么只有这样有效吗?
public bool IsEqualTo(Person compareTo)
{
return (FirstName == compareTo.FirstName && LastName == compareTo.LastName);
}
比输出:
var equals = person.IsEqualTo(person99);
会是真的。
但是你必须比较每个属性。
那么就没有比较对象的短方法吗?
谢谢。
很奇怪,在像 C# 这样庞大的语言中,您没有可以比较对象是否相等的方法。
我又搜索了一些,发现你是用记录做的:
var record1 = new Person.Hello("Niels", "Engelen");
var record2 = new Person.Hello("Niels", "Engelen");
var equalRecords = record1 == record2;
Console.WriteLine("Records " + equalRecords);
即使在 Javascript 中,您也可以轻松比较复杂的对象。
【问题讨论】:
-
您可以在较新的 C# 版本中使用
record类型而不是class,这将为您自动生成相等检查方法和运算符。除此之外,不,没有内置的自动魔法方法。
标签: c# icomparable