列表与LT;>与IEnumerable<>对比,定义新类或新的viewmodel类时

时间:2012-01-21 18:37:49

标签: c# asp.net-mvc-3 entity-framework

我已经定义了一个新的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

5 个答案:

答案 0 :(得分:3)

如果可能的话,我会远离List<T>而支持ICollection<T>:使用“普通”列表会显示您的实施过多。 IEnumerable<T>是一个不错的选择,因为它为您提供了选择实际实现的最大灵活性,但如果您需要在不枚举整个集合的情况下找出可用的元素数量,这可能还不够。

答案 1 :(得分:1)

您也可以使用IList<Question>

  

两个appraches之间有什么区别?

IEnumerable<>更通用(但功能更少)。您可以从任何Linq查询中分配它,而无需担心实际的列表类型。

List<>版本的定义更为严格,您可能需要转换为List才能分配它。它确实为您提供了更多功能。

您可能需要IList<QuestionViewModel>

之类的内容

答案 2 :(得分:0)

IEnumerable更抽象,如果可能,通常首选ListIList。仅仅因为它是一个界面,你有更多的实现可能性。

请参阅this question

答案 3 :(得分:0)

这取决于。一般情况下,您应该更喜欢返回ICollectionIListIEnumerable这样的界面,因为它可以让您选择在不破坏代码的情况下更改实际实现(只要实现坚持到接口合同)。

现在,您应该选择哪个界面取决于您需要做什么。例如,如果应该可以通过Questions.Add()向集合中添加项目,那么就不能使用IEnumerable,因为它不提供这样的方法。

答案 4 :(得分:0)

我认为其他人已经回答得很好,我只想补充一点:

IList相反,

ICollection并不总是坏的,因为它应该代表已经在内存中的信息(从而提供索引和Count属性)。在那种情况下(关于内存的信息)ICollection不会那么好,因为即使迭代器不是懒惰,对Count()的调用也可能迭代一个集合。