List <t>公开为IEnumerable <t> </t> </t>

时间:2012-08-14 14:13:10

标签: c# generics .net

我理解两者之间的层次结构,并知道如何在它们之间进行转换,但是声明这样的列表有什么根本的错误吗?

IEnumerable<int> _bookmarkedDeals = new List<int>();

我不需要在任何时候更改列表,无论是创建还是重新创建它。

作为替代方案,可能是这个

IEnumerable<int> _bookmarkedDeals = Enumerable.Empty<int>();

9 个答案:

答案 0 :(得分:2)

嗯,在这种情况下,_bookmarkedDeals将为空,因此声明有些无用。话虽如此,将List视为IEnumerable并没有错。

答案 1 :(得分:1)

(与此处的所有答案不同..)。这个宣言有些不对劲。如果不将所有时间都转回到列表中,您将无法使用任何List<T>功能。

如果以后不执行列表操作,则从您的方法返回此类型是一种良好做法。但是,当你使用相同的方法时 - 你只是让你的生活变得更难,性能也更差(因为演员阵容)。

答案 2 :(得分:0)

你的声明绝对没有问题,虽然有些人确实想要准确地声明变量类型而没有任何抽象化。

答案 3 :(得分:0)

该声明没有任何问题,但除非您有任何特定限制,IList<int>是一个更合适的列表界面。

答案 4 :(得分:0)

没错。

如果您从未以任何方式更改列表,则可以使用数组 - 它比列表略轻。

答案 5 :(得分:0)

它没有任何根本性的错误,但为什么你要切掉List提供的一些功能(IEnumerable没有)?

答案 6 :(得分:0)

没错,那是好的设计。 阅读Arrays Considered Somewhat Harmful。 关于选择正确界面的精彩内容。

答案 7 :(得分:0)

不,它没有任何问题。

如果这是一个局部变量,我认为仅使用var创建类型为List<int>的变量没有任何好处。如果你只是枚举,它完全没有害处。如果它是一个字段,也许是公开暴露的事件,那么将它暴露为List<int>IList<int>以保持自由选择具体类型是非常明智的。

答案 8 :(得分:0)

没有语法问题,但我不知道它是如何有用的。如果您未在此行中插入任何项目,则此列表将始终为空,除非您将其强制转换为List<int>,那么为什么要将其声明为IEnumerable<int>