我有两种内部代码相同但参数类型不同的方法。如何在 C# 和 ASP.NET Core 中使用一种没有重复方法的泛型方法?
我的方法一:
public async Task<OrderDto> ExecuteOrderOperations(CreateOrderCommand request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness)
{
// code....
}
我的方法二:
public async Task<OrderDto> ExecuteOrderOperationsForSH(CreateOrderCommandSH request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness)
{
// same code....
}
如果
CreateOrderCommand
和CreateOrderCommandSH
看起来相似,我建议将它们的共同功能提取到基类或接口。public async Task<OrderDto> ExecuteOrderOperations(CreateOrderBase request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness)
{
//code...
}
如果这是不可能的,除了丑陋的解决方法外,您别无他法我不推荐.
您只能为泛型参数应用 1 个类类型约束,因此在编译时无法确保
T
确实是这两个类中的一个。public async Task<OrderDto> ExecuteOrderOperations<T>(T request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness)
{
switch(request)
{
case CreateOrderCommand command:
//code...
break;
case CreateOrderCommandSH commandSH:
//code...
break;
default:
throw new ArgumentException();
}
}
public async Task<OrderDto> ExecuteOrderOperations<T>(T request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness) { // code.... }