1

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

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

我不需要在任何时候更改列表,它可以作为一个整体创建或重新创建。

作为替代方案,可能这

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

9 回答 9

2

好吧,在这种情况下,_bookmarkedDeals将是空的,所以声明有点没用。话虽如此,将列表视为 IEnumerable 并没有错。

于 2012-08-14T14:16:49.013 回答
1

(与这里的所有答案不同..)的。这个声明有一些非常错误的地方。List<T>如果不一直投射回列表,您将无法使用任何功能。

如果以后不执行任何列表操作,最好从您的方法中返回此类型。但是,当您采用相同的方法时-您只是使您的生活变得更加艰难,并且表现不佳(因为演员表)。

于 2012-08-14T14:20:56.913 回答
0

您的声明绝对没有问题,尽管有些人确实喜欢在没有任何抽象的情况下精确地声明变量类型。

于 2012-08-14T14:15:16.657 回答
0

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

于 2012-08-14T14:15:28.023 回答
0

没有什么不对。

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

于 2012-08-14T14:15:51.157 回答
0

它从根本上没有错,但是为什么要削减 List 提供的一些功能(IEnumerable 没有)?

于 2012-08-14T14:15:57.197 回答
0

没毛病,设计不错。阅读Arrays Considered Somewhat Harmful。关于选择正确界面的精彩阅读。

于 2012-08-14T14:16:13.890 回答
0

不,这没有什么问题。

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

于 2012-08-14T14:16:46.573 回答
0

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

于 2012-08-14T14:16:51.453 回答