问个基础问题,new List(IEnumerable)用在什么地方?为什么要这么用?

adultsite 2010-04-09 04:01:21
public class EmployeeRepository
{
readonly List<Employee> _employees;

public EmployeeRepository()
{
if (_employees == null)
{
_employees = new List<Employee>();
}
_employees.Add(Employee.CreateEmployee("John", "Smith"));
_employees.Add(Employee.CreateEmployee("John", "River"));
_employees.Add(Employee.CreateEmployee("Simon", "Cowell"));
}

public List<Employee> GetEmployees()
{
return new List<Employee>(_employees); //什么情况下一定要这么做呢?为什么不直接返回_employees?
}
}
...全文
179 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
adultsite 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 stning 的回复:]

还好10楼提出来。我都没仔细看。
重载构造函数,根据msdn的解释是这样的:初始化 List<(Of <(T>)>) 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
[/Quote]
是的,但这并不重要。我觉得这种使用方式和所谓的Repository Pattern有关。WPF的MVVM Pattern里经常用到。还是同样的问题,为什么要这样用?有什么好处?
hzxsasdfgh 2010-04-09
  • 打赏
  • 举报
回复
就像拿1000个苹果一样!你1个人一次只能拿2个,但是全部放进箱子里,你就能1次解决了!哈哈!
stning 2010-04-09
  • 打赏
  • 举报
回复
还好10楼提出来。我都没仔细看。
重载构造函数,根据msdn的解释是这样的:初始化 List<(Of <(T>)>) 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
stning 2010-04-09
  • 打赏
  • 举报
回复
看错了。。。眼睛不好使。误导lz。
li121201391 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 stning 的回复:]
C# code
public EmployeeRepository()
{
if (_employees == null)
{
_employees = new List<Employee>();
}
_employees.Add(Employee.CreateEmployee("John……
[/Quote]
返回的可能不止一个对象。。
vrhero 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lujianweisa 的回复:]
因为返回的Employee可能不止一个,是多个,所以需要用一个容器把他们包装起来。

比较通俗易懂。
[/Quote]
如果答案是对的通俗易懂当然好...可惜是错的,越通俗易懂危害越大...

去看看MSDN吧,别想当然...
flyerwing 2010-04-09
  • 打赏
  • 举报
回复
IEnumerable实现了就能搞FOREACH了。
ouzui 2010-04-09
  • 打赏
  • 举报
回复
List<T>,T是你想放的数据类型,可以是list,也可以是控件的类型。
hh1987110 2010-04-09
  • 打赏
  • 举报
回复
学习。。学习
lpingz 2010-04-09
  • 打赏
  • 举报
回复
对象的容器
lujianweisa 2010-04-09
  • 打赏
  • 举报
回复
因为返回的Employee可能不止一个,是多个,所以需要用一个容器把他们包装起来。

比较通俗易懂。
stning 2010-04-09
  • 打赏
  • 举报
回复
public EmployeeRepository()
{
if (_employees == null)
{
_employees = new List<Employee>();
}
_employees.Add(Employee.CreateEmployee("John", "Smith"));
_employees.Add(Employee.CreateEmployee("John", "River"));
_employees.Add(Employee.CreateEmployee("Simon", "Cowell"));
}
而这里是构造函数,也就是说在类初始化的时候,是必须调用这个地方的,那么这个构造函数里面已经初始化_employees这个容器,接着在这个容器里面添加了三个Employee对象。所以这个时候你再调用GetEmployees()的时候,实际上_employees容器里面已经有三个Employee对象了
stning 2010-04-09
  • 打赏
  • 举报
回复
 public List<Employee> GetEmployees()
{
return new List<Employee>(_employees); //什么情况下一定要这么做呢?为什么不直接返回_employees?
}
因为返回的Employee可能不止一个,是多个,所以需要用一个容器把他们包装起来。
vrhero 2010-04-09
  • 打赏
  • 举报
回复
这个重载构造函数用于接收任何实现了IEnumerable<T>接口的集合类型...

你写的这段代码无意义不代表这个构造函数无意义...
June1991 2010-04-09
  • 打赏
  • 举报
回复
学习学习。。。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧