我已经定义了一个新的ViewModel类,如下所示: -
public class myviewmodel
{
public IEnumerable<Question> Questions { get; set; }
public decimal Total { get; set; }
public string Message { get; set; }
}
但我也可以将其定义为
public class myviewmodel
{
public List<Question> Questions { get; set; }
public decimal Total { get; set; }
public string Message { get; set; }
}
如果我想创建一个新的模型类,也会发生这种情况; 那两个appraches之间有什么区别? BR
答案 0 :(得分:3)
如果可能的话,我会远离List<T>
而支持ICollection<T>
:使用“普通”列表会显示您的实施过多。 IEnumerable<T>
是一个不错的选择,因为它为您提供了选择实际实现的最大灵活性,但如果您需要在不枚举整个集合的情况下找出可用的元素数量,这可能还不够。
答案 1 :(得分:1)
您也可以使用IList<Question>
。
两个appraches之间有什么区别?
IEnumerable<>
更通用(但功能更少)。您可以从任何Linq查询中分配它,而无需担心实际的列表类型。
List<>
版本的定义更为严格,您可能需要转换为List才能分配它。它确实为您提供了更多功能。
您可能需要IList<QuestionViewModel>
答案 2 :(得分:0)
IEnumerable
更抽象,如果可能,通常首选List
或IList
。仅仅因为它是一个界面,你有更多的实现可能性。
请参阅this question。
答案 3 :(得分:0)
这取决于。一般情况下,您应该更喜欢返回ICollection
,IList
或IEnumerable
这样的界面,因为它可以让您选择在不破坏代码的情况下更改实际实现(只要实现坚持到接口合同)。
现在,您应该选择哪个界面取决于您需要做什么。例如,如果应该可以通过Questions.Add()
向集合中添加项目,那么就不能使用IEnumerable
,因为它不提供这样的方法。
答案 4 :(得分:0)
我认为其他人已经回答得很好,我只想补充一点:
与IList
相反, ICollection
并不总是坏的,因为它应该代表已经在内存中的信息(从而提供索引和Count
属性)。在那种情况下(关于内存的信息)ICollection
不会那么好,因为即使迭代器不是懒惰,对Count()
的调用也可能迭代一个集合。