在我的代码中,我使用了Vehicle
,ParkingArea
等枚举,并对其进行了扩展,以便用户可以使用默认的Vehicle和ParkingArea
值,并添加/更新自己保存在数据库中的内容。
我有一个像这样的抽象类,
public abstract class EnumExtension<T> where T : struct
{
public bool updateEnum(string name){
//code to update the enum extension
}
}
并且有一个类似于以下的控制器可以访问上述更新方法
public class MyController : ApiController
{
public void UpdateAnyEnum(string newName, int value, string typeName){
var enum_1 = (EnumExtensionForVehicle)value;
enum_1.updateEnum(newName);
}
}
我需要使此方法UpdateAnyEnum
通用,因为我不知道用户是要更新Vehicle
还是ParkingArea
在这种方法中,我需要动态确定EnumExtensionForVehicle
并致电updateEnum
typeName
参数包含我尝试编辑的枚举类型,即Vehicle
或ParkingArea
我需要使UpdateAnyEnum
为通用方法。任何想法都值得赞赏。谢谢。
答案 0 :(得分:0)
我不确定您如何确定要上课的班级。通常,您需要在UpdateAnyEnum中引用EnumExtension。对于T的值,您需要使其成为UpdateAnyEnum泛型。像下面这样。
注意:以下代码未经测试。只是关于代码应该如何工作的想法
public abstract class EnumExtension<T> where T : struct
{
public bool updateEnum(string name){
//code to update the enum extension
}
}
public class EnumExtensionForVehicle : EnumExtension<Vehicle>
{
public bool updateEnum(string name){
//code to update the enum extension
}
}
public class EnumExtensionForParkingArea : EnumExtension<ParkingArea>
{
public bool updateEnum(string name){
//code to update the enum extension
}
}
public class MyController : ApiController
{
public void UpdateAnyEnum<T>(string newName, int value, string typeName) {
EnumExtension<T> factory;
switch (typeName)
{
case "Vehicle":
factory = new EnumExtensionForVehicle();
break;
case "ParkingArea":
factory = new EnumExtensionForParkingArea();
break;
}
factory.updateEnum(newName);
}
}