如何使用具有泛型类型的不同参数的方法?

问题描述 投票:0回答:2

我有两种内部代码相同但参数类型不同的方法。如何在 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....
}
c# generics methods generic-type-parameters
2个回答
0
投票

如果

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

-1
投票

public async Task<OrderDto> ExecuteOrderOperations<T>(T request, CancellationToken cancellationToken, Domain.Entities.FoodBusiness foodBusiness) { // code.... }

© www.soinside.com 2019 - 2024. All rights reserved.