繁体   English   中英

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

[英]Generic call to a non static method of a abstract class c#

在我的代码中,我有一些枚举,例如VehicleParkingArea等,并对其进行了扩展,以便用户可以使用默认的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参数包含我尝试使用的枚举类型编辑,即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);
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM