如何检查实例类是否等于类中的变量?

时间:2013-07-18 07:30:44

标签: c# instance

如何检查实例类是否等于类中的变量?

public class ChainType
{
    public ChainType none;
    public ChainType unknown;
    public ChainType horizontal;
    public ChainType vertical;
    public ChainType centerCross;
    public ChainType leftTopCornerCross;
    public ChainType rightTopCornerCross;
    public ChainType leftBottomCornerCross;
    public ChainType rightBottomCornerCross;
}

public class aClass{
    ChainType chainType = new ChainType();

    someMethod(){
        chainType = getChainType(); // sets to chainType.horizontal

        if(chainType == ChainType.horizontal){..} // getting Error here about object reference to non-static class
    }
}

6 个答案:

答案 0 :(得分:1)

如果您想这样做,则应将static修饰符添加到ChainType中的字段:

public class ChainType
{
    public static ChainType none;
    public static ChainType unknown;
    ...
    public static ChainType rightBottomCornerCross;
}

但我不认为这会解决你的问题。它会编译但不起作用。

chainType是指针,所以没有,未知,....只有当你指定chainType one of none,unknown,....时,你可以比较它。

枚举应该更好:

public enum ChainType
{
    none,
    unknown,
    ...
}

切换到枚举后无需更改代码。

编辑(“我正在尝试遵循36号提示.devmag.org.za/2012/07/12 /”)

你得到了错误的方法。提示36说你应该为子弹而不是使用数组的单独变量:

Bullet bulletTypeA
Bullet bulletTypeB
...

而不是

Bullet[] bullets;
bullets[BulletType.A]

答案 1 :(得分:1)

提示实际上解决了enum s,所以让我们忘掉它。

您的代码与示例之间存在细微差别。班级名称为Bullets,复数。您 应该将您的班级名称更改为ChainTypes,您应该没事。

public class ChainTypes
{
    public ChainType none;
    public ChainType unknown;
    public ChainType horizontal;
    public ChainType vertical;
    public ChainType centerCross;
    public ChainType leftTopCornerCross;
    public ChainType rightTopCornerCross;
    public ChainType leftBottomCornerCross;
    public ChainType rightBottomCornerCross;
}

ChainTypes types = new ChainTypes();
ChainType chaintype = getChainType();   
if (chainType == types.horizontal) {
}

我理解这个推理,但这在比较中可能相当棘手(提示没有解决Bullet的用法。比较是在引用上完成的,所以你必须做{{1}静态并确保始终返回正确的实例。

答案 2 :(得分:0)

首先:你必须将它们定义为静态:

public class ChainType
{
    public static ChainType none; //STATIC !!
    ... 
}

因此您可以像ChainType.horizontal一样访问它们。

第二:关注一个事实,即编写像

这样的代码
if(chainType == ChainType.horizontal){..}

复制引用这两种情况, 其内容。 如果这是您所期望的,请继续第一个修复,如果没有,您还必须为您的类型定义自定义相等比较器。

答案 3 :(得分:0)

您应该使用枚举来实现此目的:

public enum ChainType
{
    none,
    unknown,
    horizontal,
    vertical,
    centerCross,
    leftTopCornerCross,
    rightTopCornerCross,
    leftBottomCornerCross,
    rightBottomCornerCross
}

public class aClass{
    ChainType chainType = ChainType.horizontal;

    someMethod(){

        if(chainType == ChainType.horizontal){..} 
    }
}

答案 4 :(得分:0)

我不确定这是否是最佳方法。如果你使用这些类来定义什么是什么,那么我会推荐一个枚举。

如果在某种继承结构中需要它们,那么你应该比较GetType()或typeof(object)。

最后,如果您需要测试两个对象是否相同(在程序中的实际内容中),那么您缺少每个实例变量的初始化,并且您的getChainType应该返回其中一个实例。

答案 5 :(得分:0)

所有答案都是正确的,大喊大叫使用枚举(虽然这是最好的做法),但让我们看看错误,错误是自我解释。您正在直接访问Class的非静态属性(Class而不是其对象)Insead您可以尝试使用chainType.horizo​​ntal(此处chainType是ChainType类的对象)。