我理解两者之间的层次结构,并知道如何在它们之间进行转换,但是声明这样的列表有什么根本的错误吗?
IEnumerable<int> _bookmarkedDeals = new List<int>();
我不需要在任何时候更改列表,无论是创建还是重新创建它。
作为替代方案,可能是这个
IEnumerable<int> _bookmarkedDeals = Enumerable.Empty<int>();
答案 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>
?