将枚举解析为 Class

Parsing enums to Class

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

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

错误是

Error 1 object.GetType() is a 'method' but is used like a type

代替这部分:

new Object.GetType(_UnitType.ToString())

试试这个(替换为定义类型的命名空间):

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

鉴于:

OP has regular classes whose names correspond to the EMilitaryUnits enum value declaration names, and seeks a way to create an instance of the class corresponding to the enum name of value of _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));