Unity C# 如何判断两个相同类型自定义类是否相同,是同一个
时间: 2024-09-07 22:03:58 浏览: 135
在Unity C#中,判断两个相同类型的自定义类是否相同,主要看您的需求是指内容相同(即值相同)还是引用相同(即内存地址相同)。
1. 引用相同:如果您想判断两个对象是否引用同一个实例,即它们的内存地址是否相同,可以直接使用“==”运算符进行比较。如果两个对象变量指向同一个实例,结果为true;如果它们指向不同的实例,结果为false。
2. 内容相同:如果您想判断两个对象的内容是否相同,即它们的字段和属性值是否相等,您需要实现一个方法来自定义比较逻辑。通常,您可以通过重写Object类中的Equals方法或者实现IEquatable<T>接口来实现。在自定义类中,您可以重写Equals方法和GetHashCode方法来定义如何比较对象是否相等。这样,您可以根据类的具体逻辑来判断两个对象的内容是否相等。
下面是一个示例代码,展示如何在自定义类中实现Equals方法和GetHashCode方法:
```csharp
public class MyCustomClass : IEquatable<MyCustomClass>
{
public int Value1 { get; set; }
public string Value2 { get; set; }
public override bool Equals(object obj)
{
return Equals(obj as MyCustomClass);
}
public bool Equals(MyCustomClass other)
{
if (other == null)
return false;
return (this.Value1 == other.Value1) && (this.Value2 == other.Value2);
}
public override int GetHashCode()
{
unchecked // Overflow is fine, just wrap
{
int hash = 17;
hash = hash * 23 + Value1.GetHashCode();
hash = hash * 23 + (Value2 == null ? 0 : Value2.GetHashCode());
return hash;
}
}
}
```
在上述代码中,Equals方法首先检查传入的对象是否为null或者是否为MyCustomClass类型的实例,然后比较两个对象的Value1和Value2字段是否相等。GetHashCode方法则根据字段生成一个哈希码,通常这个哈希码会与Equals方法的逻辑保持一致。
阅读全文