将泛型类型限制为类型列表。任何解决方法?
c#
是否有技巧或解决方法来设置泛型类型约束,使其只允许两种类型: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);
}