C#中的自定义等于方法

时间:2015-05-19 11:29:39

标签: c#

我写了一个名为baseCommodity的课程,它包含一个自定义的Equals方法:

public override bool Equals(object obj)
{
    BaseCommodity other = obj as BaseCommodity;
    return other != null && other.GetType() is this.GetType());
}

我想将other.GetType()this类的类型进行比较,但is this.GetType()不起作用。我不断收到错误“意外的符号this', expecting类型”“

3 个答案:

答案 0 :(得分:3)

您想要==代替:

return other != null && other.GetType() == this.GetType();

当您知道可以检查的对象的编译时类型标记时,可以使用is

作为旁注,如果您要覆盖Equals(object other),或许您还希望实施IEquatable<BaseCommodity>并覆盖它Equals(BaseCommodity other),从而为您节省类型检查。

此外,这是一个非常类型的相等检查。

答案 1 :(得分:1)

或许更多的信息对于答案来说会很好。

GetType返回类型对象,而不是类型令牌。使用is处理类型标记,使用相等(==)比较类型对象。

换句话说:

object a = 12893;
if (a is int) // compare by token:
{ ... }

object a = 12345;
if (a.GetType() == typeof(int)) // compare by equality of type object.
{ ... }

PS:Equality可以通过继承给出奇怪的结果。在这种情况下,您可能希望改为使用SomeType.IsAssignableFrom

答案 2 :(得分:0)

正如其他人所说,你需要比较运算符==

is是一种类型检查,它与左侧的变量和右侧的类型一起使用:

string s = "";
bool isString = s is string;

请注意,GetType的结果不是类型,它是表示类型变量。