C# 如何使==平等地工作?
所以我有一节课,我在另一个话题中讲过: 我根据建议更改了代码,它可以正常工作。。。但是当我只是尝试比较其他地方(pointA==pointB)时,我永远不会得到它的真实性(除非ofc它们是相同的实例) 所以我怀疑==不会再次调用我的重写的equals(对象)。C# 如何使==平等地工作?,c#,C#,所以我有一节课,我在另一个话题中讲过: 我根据建议更改了代码,它可以正常工作。。。但是当我只是尝试比较其他地方(pointA==pointB)时,我永远不会得到它的真实性(除非ofc它们是相同的实例) 所以我怀疑==不会再次调用我的重写的equals(对象)。 然后调用什么方法?我是否也必须重写它,或者是否有办法让它调用我已经固定的equals?==是一个运算符,不调用方法。可以在C#中执行运算符重载: 不过要小心,这可能会导致代码难以理解,因为==通常用于参考比较 通常,在类中重写相等比较
然后调用什么方法?我是否也必须重写它,或者是否有办法让它调用我已经固定的equals?
==
是一个运算符,不调用方法。可以在C#中执行运算符重载:
不过要小心,这可能会导致代码难以理解,因为==
通常用于参考比较
通常,在类中重写相等比较时,可以采用以下方法:
protected bool Equals(Class other)
{
return Equals(this.field, other.field);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return Equals((Class)obj);
}
public static bool operator ==(Class left, Class right)
{
return Equals(left, right);
}
最好也重写
GetHashCode()
。别忘了重载操作符=
=
是一个运算符,不调用方法。可以在C#中执行运算符重载:
不过要小心,这可能会导致代码难以理解,因为==
通常用于参考比较
通常,在类中重写相等比较时,可以采用以下方法:
protected bool Equals(Class other)
{
return Equals(this.field, other.field);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return Equals((Class)obj);
}
public static bool operator ==(Class left, Class right)
{
return Equals(left, right);
}
最好也重写
GetHashCode()
。别忘了重载操作符=
=
是一个运算符,不调用方法。可以在C#中执行运算符重载:
不过要小心,这可能会导致代码难以理解,因为==
通常用于参考比较
通常,在类中重写相等比较时,可以采用以下方法:
protected bool Equals(Class other)
{
return Equals(this.field, other.field);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return Equals((Class)obj);
}
public static bool operator ==(Class left, Class right)
{
return Equals(left, right);
}
最好也重写
GetHashCode()
。别忘了重载操作符=
=
是一个运算符,不调用方法。可以在C#中执行运算符重载:
不过要小心,这可能会导致代码难以理解,因为==
通常用于参考比较
通常,在类中重写相等比较时,可以采用以下方法:
protected bool Equals(Class other)
{
return Equals(this.field, other.field);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return Equals((Class)obj);
}
public static bool operator ==(Class left, Class right)
{
return Equals(left, right);
}
最好也重写
GetHashCode()
。别忘了重载操作符=代码>我不确定你的问题到底是什么
A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象
只要确保你理解==的意思,否则你就无法在逻辑中使用它。我不确定你的问题到底是什么
A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象
只要确保你理解==的意思,否则你就无法在逻辑中使用它。我不确定你的问题到底是什么
A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象
只要确保你理解==的意思,否则你就无法在逻辑中使用它。我不确定你的问题到底是什么
A==B评估A是否引用与B相同的对象。不是相同的值,而是相同的精确引用。为什么要使用==来比较不同的对象毫无意义。如果要比较字符串,请使用.toString()或.equals(),或编写自己的方法来比较对象
请确保您理解==的含义,否则您将无法在逻辑中使用它。为什么不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在成千上万不需要改变的人之间找到==真的不容易…为什么你不能直接调用X.Equals(Y)?==默认为测试实例引用的相等性。另一个选项是重写==运算符。所有这些都在这里得到了很好的解释:以下是您所需要的:(查找“重写运算符==”)嗯,我不能只调用X.Equals(Y),因为我已经编写了一些代码。。。在数千个不需要更改的其他项之间找到==并不容易…a==b
将导致StackOverFlowException
修复。比较语句只是一个伪占位符。这意味着我只是保持它的原样,除非它是我想要更改的类的特定组合?(即如果(a是我的班级,b是我的班级)