对抽象类 c# 的非静态方法的泛型调用



在我的代码中,我有像VehicleParkingArea等枚举,并且我已经扩展了它们,以便用户可以使用默认的车辆和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并调用updateEnumtypeName参数包含我尝试编辑的枚举类型,即VehicleParkingArea

我需要使UpdateAnyEnum成为通用方法。任何想法和想法都非常感谢。谢谢。

我不确定您如何确定要调用的类。一般来说,你需要在 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);
}
}

最新更新