嵌套枚举或嵌套类/结构

时间:2017-05-11 11:26:25

标签: c# enums

如果我需要一个类对象来拥有某个属性,我们称之为“ type ”。

我希望类型为“轮式”“nonWheeled”。如果将车辆类的实例设置为轮换属性,我想要该属性还有两个其他属性之一,例如“twoWheeled”“fourWheeled”。

我尝试使用以下枚举来执行此操作:

private enum wheeledTypes {
    twoWheeled,
    fourWheeled
}

private enum Wheels
{
    a = wheeledTypes.twoWheeled,
    b = wheeledTypes.fourWheeled,
    c = nonWheeled
}

但是你可以看到,然后我得到三种类型(a / b / c,我不想要)。我只想要a / b,或者轮式/非轮式,轮流轮流可以有两种类型。

编辑:如果使用了类,您可能希望它们本身具有属性,构造函数,方法等。我不想要这个。我只是想将车辆设置为轮式(两个/四个)或非轮式车辆。轮式和非轮式不应具有其他性能。这就是为什么我认为枚举是合适的。也许我错了!

5 个答案:

答案 0 :(得分:1)

你应该上课,如下:

class Vehicle { }

class NonWheeledVehicle : Vehicle { }

class WheeledVehicle : Vehicle 
{ 
    internal enum WheelTypes { TwoWheeled, FourWheeled }
}

答案 1 :(得分:0)

你会想要这样的东西:

public enum WheelType
{
    TwoWeeled,
    FourWeeled
}

public class Vehicle
{

}

public class WheeledVehicle : Vehicle
{
    public WheelType WheelType { get; set; }
}

然后,Vehicle是您的non-wheeled车型,而WheeledVehicle是您的Vehicle具有特定WheelType

答案 2 :(得分:0)

使用类

class Vehicle {
}

class Wheeled : Vehicle {
}

class NonWheeled : Vehicle {
}

class TwoWheeled : Wheeled {
}

class FourWheeled: Wheeled {
}

答案 3 :(得分:0)

枚举不是用作属性,而只是用作常量值的表示,例如整数,字符串e.t.c

您想要的是通过继承适用。

std::enable_if

或者根据您的需要,您可以将轮子的数量保持为@ rory.ap建议的枚举

答案 4 :(得分:0)

只是一个建议,但为什么不简单地让属性可以为空?这样,如果它为空,它是非轮式的,你仍然可以直接与枚举进行比较

enum Wheels{
    twoWheeled,
    fourWheeled
}

class AnyClass
{
    public Wheels? Wheels{get;set;} //the question marks makes the property nullable
}

var a=  new AnyClass{Wheels = Wheels.twoWheeled};
if(a.Wheels == null){} //unwheeled
if(a.Wheels.HasValue){} //wheeled
if(a.Wheels==Wheels.twoWheeled){} //direct check on specific type also works

我个人也想添加一个暴露属性的接口。这样,您就可以在该界面上创建扩展方法,例如static bool HasWheels(this IWheels wheelsObject)