将泛型类型限制为类型列表。任何解决方法?

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);
}


以上是将泛型类型限制为类型列表。任何解决方法?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>