C# 从操作方法返回最具体或最通用的类型更好吗?

C# 从操作方法返回最具体或最通用的类型更好吗?,c#,asp.net-mvc,return-type,actionmethod,C#,Asp.net Mvc,Return Type,Actionmethod,两者的好处或坏处是什么 一般来说,我会选择更一般的类型。这样我就不会破坏任何可能使用返回类型信息的客户端 如果我返回一个更一般的类型,在action方法的实现中,我总是可以将该类型更改为其他类型。考虑下面的场景:您返回一个自定义操作结果,该结果来自于代码> ActoReals< 。在代码库的某个地方,有人假设返回值是MyCustomActionResult。在这种情况下,如果更改返回值,则会破坏客户端代码 顺便说一句:我也这样做——返回最合适的通用类型——用于所有方法,而不仅仅是操作方法 编辑:

两者的好处或坏处是什么

一般来说,我会选择更一般的类型。这样我就不会破坏任何可能使用返回类型信息的客户端

如果我返回一个更一般的类型,在action方法的实现中,我总是可以将该类型更改为其他类型。考虑下面的场景:您返回一个自定义操作结果,该结果来自于代码> ActoReals< <代码>。在代码库的某个地方,有人假设返回值是
MyCustomActionResult
。在这种情况下,如果更改返回值,则会破坏客户端代码

顺便说一句:我也这样做——返回最合适的通用类型——用于所有方法,而不仅仅是操作方法


编辑:请注意,这并不意味着我将返回
对象
。挑战在于找到代表“最合适”抽象的类型。

我的指导方针始终是最具体的,也是最一般的

数据类型越通用,使用它的代码对数据类型的了解就越少。例如,如果一个方法返回一个集合,我将返回该方法生成的新创建的集合。如果它返回一个内部数据结构,我会将它升级到
IEnumerable

但是,如果它返回一个数组或一个
列表
,因为这是它内部构建的,那么获取数据的代码现在可以访问集合中的更多功能

另一方面,返回最通用(在限制范围内)的数据类型意味着您总是为所有集合返回
IEnumerable
或类似的数据类型,即使该方法在内部构建了一个新数组并返回了该数组。如果调用代码需要使用新的数组或列表,那么调用代码现在必须手动将集合的内容复制到新的数组或列表中

这意味着更多,在大多数情况下,不必要的工作

至于输入,我选择可以使用的最通用类型,因此对于集合,除非我特别需要数组或列表或类似的类型,否则我将接受
IEnumerable
。通过这样做,我可以确保调用代码的工作量更少。这可能意味着我必须在内部做一些工作,所以这是一种权衡


重要的是要达到平衡。不要总是太笼统或太具体。找出有意义的正确类型,并考虑调用代码必须做什么,以便在代码中传递数据或接受输出数据。工作越少越好。

所以你从所有东西返回
对象
?当然不是。显然,我在回答中没有把这一点说清楚。我会澄清的。