将枚举解析为 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));
数组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 atype
代替这部分:
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));