繁体   English   中英

解析枚举类

[英]Parsing enums to Class

数组AllUnits是一个列表列表。 我正在尝试将新对象添加到第二个列表中。 我还有一个名为EMilitaryUnits的枚举,并且我有一个与该枚举中的字符串同名的类。 而且我不知道如何将枚举转换为我尝试过的类

_City.Owner.Military.AllUnits[(int)_UnitType].Add(new Object.GetType(_UnitType.ToString()));

错误是

错误1 object.GetType()是一种“方法”,但是像type一样使用

代替这一部分:

new Object.GetType(_UnitType.ToString())

尝试以下操作(使用定义了类型的名称空间替换):

Activator.CreateInstance(Type.GetType("<namespace>." + _UnitType.ToString()))

鉴于:

OP具有其名称与EMilitaryUnits枚举值声明名称相对应的常规类,并寻求一种方法来创建与_UnitType的枚举名称相对应的类的实例。

我的建议是建立一个静态工厂来做到这一点,因为类型将是固定的,枚举也将是固定的。 下面是一个示例,说明了如何实现。

public enum EMilitaryUnits
{
    Cavalry,
    CanonFodder,
    // ... others
};

public interface IMilitaryUnit 
{
    // rest
}

public class Cavalry : IMilitaryUnit 
{
    public Cavalry() {}
    // ... rest
}

public class CannonFodder : IMilitaryUnit 
{
    public CannonFodder() {}
    // ... rest
}

public static MilitaryUnitFactory
{
    private static readonly Dictionary<EMilitaryUnits, Func<IMilitaryUnit>> map = 
        new Dictionary<EMilitaryUnits, Func<IMilitaryUnit>> {
            { EMilitaryUnits.Cavalry, () => new Cavalry() },
            { EMilitaryUnits.CanonFodder, () => new CanonFodder() },
            // more for the others
        };

    public static IMilitaryUnit Create(EMilitaryUnits kind)
    {
        return map[kind]();
    }
}

用法示例:

_City.Owner.Military.AllUnits[(int)_UnitType].Add(MilitaryUnitFactory.Create(_UnitType));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM