是否有技巧或解决方法可以设置泛型类型约束,使其只允许两种类型:int和Guid?或者通常是允许类型的列表。
我有大量的方法,看起来类似于:
public IVehicle<TVehicleId> GetVehicle(TVehicleId? vehicleId)
{
switch (vehicleId)
{
case int vid:
return ApplicationDbContext.VehicleRepo.Single(x => x.VehicleId == vid);
case Guid vid:
return ApplicationDbContext.ExVehicleRepo.Single(x => x.ExVehicleId == vid);
default:
throw new NotSupportedException("Vehicle Id can be either int or Guid, but was : " + typeof(TVehicleId));
}
}
在车辆id既不是int也不是Guid的情况下,始终存在抛出NotSupportedException的默认情况。
我想消除抛出这些异常的需要,并在编译时将TVehicleId限制为int和Guid。我想知道是否有人尝试过找到这样做的方法?
它需要是泛型吗?听起来过载GetVehicle
可能是最简单的方法
public IVehicle<TVehicleId> GetVehicle(int vehicleId)
{
return ApplicationDbContext.VehicleRepo.Single(x => x.VehicleId == vehicleId);
}
public IVehicle<TVehicleId> GetVehicle(Guid vehicleId)
{
return ApplicationDbContext.ExVehicleRepo.Single(x => x.ExVehicleId == vehicleId);
}