在C#枚举中使用不同的类型

Fra*_*nby 3 c# types enumeration

我有一个如下所示的枚举:

public enum EnumWeapons
{
    Fists = new WeaponFists(),
    Sword = new WeaponSword(),
    Bow = new WeaponBow(),
    Staff = new WeaponStaff()
}
Run Code Online (Sandbox Code Playgroud)

哪些派生自基类武器.

是否有可能以这种方式使用枚举?

如果是这样,我能做以下事情吗?:

public Weapon weapon = (Weapon)EnumWeapons.Fists;
Run Code Online (Sandbox Code Playgroud)

我的尝试没有按预期工作,任何帮助或指导都赞赏:).谢谢!

jas*_*son 10

这是不可能的,a的基础类型enum是各种整数类型.从文档:

经批准的类型枚举是byte,sbyte,short,ushort,int,uint,long,或ulong.

此外,我甚至不认为你想要做的事情是有道理的.当你需要武器时,你真的每次都想要相同的实例吗?我对此表示怀疑.

我认为你真正想要的是一家工厂.在它最天真的形式,你可以说:

public enum WeaponType {
    Fists,
    Sword,
    Bow, 
    Staff
}

public class WeaponFactory {
    public Weapon Create(WeaponType weaponType) {
        switch(weaponType) {
            case WeaponType.Fists:
                return new WeaponFists();

            case WeaponType.Sword:
                return new WeaponSword();

            case WeaponType.Bow:
                return new WeaponBow();

            case WeaponType.Staff:
                return new WeaponStaff();

            default:
                throw new ArgumentOutOfRangeException("weaponType");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以说:

var weapon = weaponFactory.Create(WeaponType.Fists);
Run Code Online (Sandbox Code Playgroud)


use*_*016 6

不,枚举必须是整数类型(byte,short,int,long).

您要做的事情可能是这样实现的:

public static class EnumWeapons
{
    public static readonly Weapon Fists = new WeaponFists();
    public static readonly Weapon Sword = new WeaponSword();
    public static readonly Weapon Bow = new WeaponBow();
    public static readonly Weapon Staff = new WeaponStaff();
}
Run Code Online (Sandbox Code Playgroud)

  • @Jason:不.我同意这不是最好的解决方案,但也许*是OP正在寻找的东西.至于downvote,我不生气,我只是不同意你:) (2认同)