C# 列表<&燃气轮机;与IEnumerable相比<>;,定义新类或新viewmodel类时
我定义了一个新的ViewModel类,如下所示:-C# 列表<&燃气轮机;与IEnumerable相比<>;,定义新类或新viewmodel类时,c#,asp.net-mvc-3,entity-framework,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; } } 公共类myviewmodel { 公共IEnumerable问题{get;set;} 公共十进制总数{
public class myviewmodel
{
public IEnumerable<Question> Questions { get; set; }
public decimal Total { get; set; }
public string Message { get; set; }
}
公共类myviewmodel
{
公共IEnumerable问题{get;set;}
公共十进制总数{get;set;}
公共字符串消息{get;set;}
}
但我也可以把它定义为
public class myviewmodel
{
public List<Question> Questions { get; set; }
public decimal Total { get; set; }
public string Message { get; set; }
}
公共类myviewmodel
{
公共列表问题{get;set;}
公共十进制总数{get;set;}
公共字符串消息{get;set;}
}
如果我想创建一个新的模型类,这种情况也会发生;
那么这两种方法之间的区别是什么呢?
BR
IEnumerable
更为抽象,如果可能的话,通常优先于List
或IList
。这仅仅是因为它是一个接口,您有更多的实现可能性
请参阅。如果可能的话,我会远离
列表
而支持ICollection
:使用“普通”列表会暴露太多关于实现的信息IEnumerable
是一个不错的选择,因为它为您提供了选择实际实现的最佳灵活性,但如果您需要在不枚举集合的情况下找出可用元素的数量,它可能是不够的。您也可以使用IList
这两种方法的区别是什么
IEnumerable
更通用(但功能也更少)。您可以从任何Linq查询分配它,而不必担心实际的列表类型
列表
版本的定义更为严格,您可能必须先转换为列表,然后才能分配它。它确实为您提供了更多功能
您可能需要类似于IList的东西,这取决于您的需要。通常,您应该更喜欢返回接口,例如
ICollection
、IList
或IEnumerable
,因为它允许您在不破坏代码的情况下更改实际实现(只要实现遵守接口约定)
现在,您应该选择哪个接口取决于您需要做什么。例如,如果可以通过
Questions.add()
将项目添加到集合中,则不能使用IEnumerable
,因为它不提供此类方法。我认为其他人已经回答得很好,我只想添加一件事:
IList
与ICollection
相比并不总是坏的,因为它应该表示内存中已经存在的信息(从而提供索引和Count
属性)。在这种情况下(关于内存的信息),ICollection
不如调用Count()
即使迭代器不懒惰,也可能对集合进行迭代。IListagaintsList
的实际好处是什么?透露太多关于实现的信息有什么错?@extrogorey它直接与封装目标背道而驰。对,这句话听起来像是你在谈论信息来源的机密性。