C#返回类型推理不好的做法?

时间:2013-12-19 20:35:46

标签: c#

这种方式强制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的调用看起来更好更容易阅读

我在这里疯了吗?或者我今天应该戒烟....我很困惑

1 个答案:

答案 0 :(得分:1)

我经常使用这种模式来减少冗长和支持匿名类型。通常,我将声明方法如下:

TResult Run<TQuery, TResult>(TQuery query, TResult schema = default(TResult));

在调用时,我总是将模式参数命名为(例如schema: new { a = default(int) }),我发现这使得代码比传递随机默认或匿名类型的代码少得多。另外,通过设置参数的默认值,我可以省略额外的参数,以防你想手动指定类型参数(当你不涉及匿名类型时,你有时可能会这样做。)

最重要的是,我发现其他与我合作的开发人员不太熟悉类型推断和泛型的复杂性,他们并不努力阅读或使用这些方法;他们能够理解意图,并在自己的代码中遵循模式。