加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:48:57 所属栏目:百科 来源:网络整理
导读:我有一个如下所示的枚举: public enum EnumWeapons{ Fists = new WeaponFists(),Sword = new WeaponSword(),Bow = new WeaponBow(),Staff = new WeaponStaff()} 哪些派生自基类武器. 是否有可能以这种方式使用枚举? 如果是这样,我能做以下事情吗? : publ
我有一个如下所示的枚举:

public enum EnumWeapons
{
    Fists = new WeaponFists(),Sword = new WeaponSword(),Bow = new WeaponBow(),Staff = new WeaponStaff()
}

哪些派生自基类武器.

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

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

public Weapon weapon = (Weapon)EnumWeapons.Fists;

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

解决方法

这是不可能的,枚举的基础类型是各种整数类型.从 documentation:

The approved types for an enum are byte,sbyte,short,ushort,int,uint,long,or 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");
        }
    }
}

现在你可以说:

var weapon = weaponFactory.Create(WeaponType.Fists);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读