从回调函数推断通用参数类型

时间:2020-03-30 13:25:14

标签: c# api generics callback

我有一段当前看起来像这样的代码:

Subscribe方法的签名:

void Subscribe<T, TResult>(Func<T, TResult> action);

class Service { 
   int methodThatRequiresIntAndReturnsInt(int i) => i * 2;
}

在我看来,当尝试使用subscribe方法时,应该可以推断出T和TReturn的类型,但是编译器告诉我,不能从用法中推断出这些类型,这意味着我最终编写了这段代码:

Queue.Subscribe<int, int>(Service.methodThatRequiresIntAndReturnsInt);

我的问题是是否可能,如果可以,方法签名/用法应如何显示,以便可以在没有类型提示的情况下使用它,例如:

Queue.Subscribe(input => input * 2);

当前的实现方式如下:

_commandSubscription.Subscribe<CreateUpdateCommand, bool>(Resolve<UpdateService>().CreateUpdate);
_commandSubscription.Subscribe<AddCommentCommand>(Resolve<UpdateService>().AddComment);

服务方法的实现如下:

public class UpdateService {

    public void AddComment(AddCommentCommand command) {
         // DO STUFF
    }

    public bool CreateUpdate(CreateUpdateCommand command) {
        // Do stuff 
        return true;
    }

}

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

Queue.Subscribe((int i) => Service.methodThatRequiresIntAndReturnsInt(i));

在实践中,订阅的功能等效,并且避免显式键入所有通用参数。