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?
    }
}

解决方案 »

  1.   

    这个重载构造函数用于接收任何实现了IEnumerable<T>接口的集合类型...你写的这段代码无意义不代表这个构造函数无意义...
      

  2.   

     public List<Employee> GetEmployees()
        {
            return new List<Employee>(_employees); //什么情况下一定要这么做呢?为什么不直接返回_employees?
        }
    因为返回的Employee可能不止一个,是多个,所以需要用一个容器把他们包装起来。
      

  3.   

    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对象了
      

  4.   

    因为返回的Employee可能不止一个,是多个,所以需要用一个容器把他们包装起来。比较通俗易懂。
      

  5.   

    List<T>,T是你想放的数据类型,可以是list,也可以是控件的类型。
      

  6.   

    IEnumerable实现了就能搞FOREACH了。
      

  7.   

    如果答案是对的通俗易懂当然好...可惜是错的,越通俗易懂危害越大...去看看MSDN吧,别想当然...
      

  8.   

    还好10楼提出来。我都没仔细看。
    重载构造函数,根据msdn的解释是这样的:初始化 List<(Of <(T>)>) 类的新实例,该实例包含从指定集合复制的元素并且具有足够的容量来容纳所复制的元素。
      

  9.   

    是的,但这并不重要。我觉得这种使用方式和所谓的Repository Pattern有关。WPF的MVVM Pattern里经常用到。还是同样的问题,为什么要这样用?有什么好处?