这种方式强制C#使用返回类型推理是一种非常糟糕的做法吗?
所以我有这样的界面:
public interface IQueryHandlerRunner
{
TResult RunHandler<TQuery, TResult>(TQuery query)
where TQuery : IQuery;
}
我这样使用它:
_queryHandlerRunner.RunHandler<GiveMeAllPreferedCustomersQuery, PreferedCustomersDto[]>(
new GiveMeAllPreferedCustomersQuery());
但我希望能够使用返回类型推断,但我知道无法完成....
实际上它可以,所以我创建了一个像这样的重载:
TResult RunHandler<TQuery, TResult>(TQuery query, TResult result)
where TQuery : IQuery;
我这样使用它:
_queryHandlerRunner.RunHandler(new GiveMeAllPreferedCustomersQuery(), default(PreferedCustomersDto[]));
感觉更清洁,但同时感觉像嗅觉一样肮脏lol
您的想法
我不喜欢这样的事实:我在我的API中引入了返回类型作为参数,但是对我的api的调用看起来更好更容易阅读
我在这里疯了吗?或者我今天应该戒烟....我很困惑
答案 0 :(得分:1)
我经常使用这种模式来减少冗长和支持匿名类型。通常,我将声明方法如下:
TResult Run<TQuery, TResult>(TQuery query, TResult schema = default(TResult));
在调用时,我总是将模式参数命名为(例如schema: new { a = default(int) }
),我发现这使得代码比传递随机默认或匿名类型的代码少得多。另外,通过设置参数的默认值,我可以省略额外的参数,以防你想手动指定类型参数(当你不涉及匿名类型时,你有时可能会这样做。)
最重要的是,我发现其他与我合作的开发人员不太熟悉类型推断和泛型的复杂性,他们并不努力阅读或使用这些方法;他们能够理解意图,并在自己的代码中遵循模式。