将泛型类型限制为类型列表.有解决办法吗



是否有技巧或解决方法可以设置泛型类型约束,使其只允许两种类型: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);
}

最新更新