c# - 从回调函数推断泛型参数类型
问题描述
我有一段目前看起来像这样的代码:
订阅方法的签名:
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;
}
}
解决方案
您可以执行以下操作:
Queue.Subscribe((int i) => Service.methodThatRequiresIntAndReturnsInt(i));
在实践中,订阅函数的工作方式是等效的,并且您避免显式键入所有通用参数。
推荐阅读
- python - 使用 .pyw 文件在 windows10 中调度任务
- flutter - 我想在 Flutter 中验证我的 textFormField 而不改变装饰
- python - 在 Databricks 中使用 Pyspark 更新数据库表
- function - 使 click() 函数中的 {force:true} 成为默认行为
- python - 编写一个简单的刽子手游戏 - 寻找填补空白的方法
- r - list.files 总是返回目录
- node.js - 使用 Chai.throw 异步捕获复杂的 Mongoose 错误
- android - Android:将多个点击侦听器附加到按钮?
- swift - 如何在 Xcode 11 中将图像添加为具有透明背景的按钮
- reactjs - 在 useEffect 中反应条件