是否将List <int>分配给IEnumerable <int>有益还是没有?</int> </int>

时间:2013-12-03 17:40:24

标签: c#

我使用的语言是C#。

假设对象的方法返回List<int>。如果我们将此结果分配给IEnumerable<int>类型的变量,我们会从中受益吗?

换句话说

IEnumerable<int> result = list

优于

List<int> result = list

其中listList<int>

我直觉地认为我们不会从中受益。但是,我想确定一下。因此我问这个。

3 个答案:

答案 0 :(得分:1)

缺点是您将无法使用List<T>特定方法。 好处是您可以将返回列表的方法中的实现更改为另一种列表(或设置或...),因为您唯一需要的是IEnumerable<T>

如果您需要IList<T>等方法,那么妥协为Add

而且,从方法返回List<T>不是一个好主意。如果您是该方法的实施者,那么您至少应该返回IList<T>或甚至IEnumerable<T>

通常情况下,必须强制转换为基本类型,请参阅new keyword in method signature

答案 1 :(得分:0)

您执行此操作的唯一原因是将列表返回给调用方,这样调用方将无法修改列表*。

* 除非调用者在列表上执行了强制转换

那就是说 - 使用最不具体的类/接口总是有益的 - 因为它为代码重用开辟了更多的可能性。

答案 2 :(得分:0)

在这种特定情况下,没有理由将局部变量键入为接口。如果对象明确地实现了某个界面,那么您可能希望这样做,但ListIEnumerable不是这种情况。它明确地实现了IEnumerable<T>

如果您认为您可能希望将其他内容设置为result IEnumerable而不是List,那么您可以这样做,但通常除非你真的处于那种情况,否则我不会费心做出这样的改变,而不是试图在预先做到这一点。作为局部变量,而不是说某种类型的公共API的一部分,您始终能够在未来的版本中更改变量的类型,而不会产生任何实际的重大后果。