C# this.Equals(typeof(...));

本文关键字:this typeof Equals | 更新日期: 2023-09-27 18:12:17

我有以下一段代码:

class Tile
{
    public TCODColor color { get; protected set; }
    public int glyph { get; protected set; }
    public Boolean isDigable()
    {
        return this.Equals(typeof(Wall));
    }
    public Boolean isGround()
    {
        return this.Equals(typeof(Floor));
    }
}

Wall和Floor类都继承自Tile。在程序的另一点,我有一个if语句,它是这样的,例如:

public void dig(int x, int y)
{
    if (tiles[x, y].isDigable())
    {
        tiles[x,y] = new Floor();
    }
}

瓷砖是Tile类的二维数组,它们的内容被初始化为Floor或Wall。因此,如果tile是Wall,则它是Digable(并且应该返回true),但无论如何它总是返回false,因此不执行其他代码。由于我不熟悉c#,我想我在语法方面做错了什么,有什么建议吗?

C# this.Equals(typeof(...));

Equals方法用于测试两个值是否相等(在某种程度上),例如,测试Floor类型的两个变量是否在内存中引用同一个实例。

要测试对象是否为某种类型,使用is操作符:

public Boolean isDigable()
{
    return this is Wall;
}
public Boolean isGround()
{
    return this is Floor;
}

或者像Rotem建议的那样,你可以修改你的类,使isDigableisGround虚拟方法,并在你的子类中覆盖它们,像这样:

class Tile
{
    public TCODColor color { get; protected set; }
    public int glyph { get; protected set; }
    public virtual bool isDigable() 
    { 
        return false; 
    }
    public virtual bool isGround() 
    { 
        return false; 
    }
}
class Wall: Tile
{
    public override bool isDigable()
    { 
        return true; 
    }
}
class Floor : Tile
{
    public override bool isGround()
    { 
        return true; 
    }
}