我写了一个名为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
类型”“
答案 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
的结果不是类型,它是表示类型的变量。