将列表分配给<int> IEnumerable 是否<int>有益?



我使用的语言是C#。

假设一个对象的方法返回一个List<int>。如果我们将这个结果分配给IEnumerable<int>类型的变量,我们是否会受益?

换句话说,

IEnumerable<int> result = list

比好

List<int> result = list

其中CCD_ 4是CCD_。

我凭直觉认为,我们不会有任何好处。不过,我想确定一下。因此,我提出这个问题。

缺点是不能使用List<T>特定的方法。好处是,您将能够更改将列表返回到另一种列表(或set或…)的方法中的实现,因为您唯一需要的是IEnumerable<T>

如果您需要Add之类的方法,则可以使用IList<T>

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

通常,在某些情况下,必须强制转换为基类型,请参阅方法签名中的new关键字。

这样做的唯一原因是将列表返回给调用者,这样调用者就无法修改列表*。

*除非呼叫者在列表上执行硬转换

也就是说,使用尽可能少的特定类/接口总是有益的,因为它为代码重用开辟了更多的可能性。

在这种特定情况下,没有理由将本地变量键入为接口。如果对象显式地实现了某个接口,那么您可能想要这样做,但ListIEnumerable的情况并非如此。它显式地实现了IEnumerable<T>

如果你认为你可能想将其他内容设置为result,即IEnumerable而不是List,那么你可以这样做,但通常情况下,我不会费心做出这样的更改,除非你真的处于这种情况,而不是试图先发制人。作为一个局部变量,而不是一个类型的公共API的一部分,您总是能够在未来的修订中更改变量的类型,而不会产生任何实际的重大后果。

最新更新