[英]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.