Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#返回类型推断错误实践?_C# - Fatal编程技术网

C#返回类型推断错误实践?

C#返回类型推断错误实践?,c#,C#,这种强迫C#使用返回类型推断的方法真的是一种糟糕的做法吗 所以我有一个这样的界面: public interface IQueryHandlerRunner { TResult RunHandler<TQuery, TResult>(TQuery query) where TQuery : IQuery; } _queryHandlerRunner.RunHandler<GiveMeAllPreferedCustomersQuery, Prefered

这种强迫C#使用返回类型推断的方法真的是一种糟糕的做法吗

所以我有一个这样的界面:

public interface IQueryHandlerRunner
{
    TResult RunHandler<TQuery, TResult>(TQuery query)
        where TQuery : IQuery;
}
_queryHandlerRunner.RunHandler<GiveMeAllPreferedCustomersQuery, PreferedCustomersDto[]>(
    new GiveMeAllPreferedCustomersQuery());
_queryHandlerRunner.RunHandler(new GiveMeAllPreferedCustomersQuery(), default(PreferedCustomersDto[]));
它感觉更干净,但同时感觉脏lol像一股气味

你觉得怎么样

我不喜欢在API中引入返回类型作为参数,但对API的调用看起来更好、更容易阅读


我是不是疯了?或者我应该今天就戒烟……我很困惑,我经常使用这种模式来减少冗长和支持匿名类型。通常,我将按如下方式声明该方法:

TResult Run<TQuery, TResult>(TQuery query, TResult schema = default(TResult));
TResult运行(TQuery查询,TResult schema=default(TResult));
调用时,我总是给模式参数命名(例如,
schema:new{a=default(int)}
),我发现这比仅仅传递一个随机的默认值或匿名类型要简单得多。另外,通过设置参数的默认值,我可以省略额外的参数,以防需要手动指定类型参数(在不涉及匿名类型的情况下,有时可能需要这样做)


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

如果您这样做是因为您确实希望能够指定默认的返回值,那么就可以了。如果您这样做只是为了不必键入那些
,那么它就不是真的(不管怎样,主观上)。@valverij注意,当涉及匿名类型时,类型推断不仅仅是一种方便,而是一种要求。@Servy,很好的回答,我在这里没有考虑匿名类型
TResult Run<TQuery, TResult>(TQuery query, TResult schema = default(TResult));