方法返回列表时,该方法返回类型IEnumerable.But的GetType显示为列表

问题描述 投票:0回答:3

虽然,下面的问题可能是愚蠢的,但它仍然会帮助别人也。我有方法返回一个list.And方法返回类型IEnumnerable。方法:

public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }

        public static IEnumerable<Person> GetPersons()
        {
            List<Person> personList = new List<Person>()
                                          {
                                              new Person() { Age = 10, Name = "Vijay"}
                                          };

           return personList;

        }
    }

现在,每当我调用这个方法并检查type.The输出

System.Collections.Generic.List

既然是一个列表。我应该能够将项目添加到列表中。但是,系统抛出一个编译错误。下面是执行部分:

public class Program
    {
        public static void Main(string[] ar)
        {
            var personList = Person.GetPersons();
            Console.WriteLine(personList.GetType()); //System.Collections.Generic.List
            personList.Add(new Person(){Age = 11, Name = "Ajay"}); // Compilation error
            Console.ReadKey();

        }
    }

所以,任何人都可以帮助我的理解。这将是很大的帮助。提前致谢。

c# generics collections
3个回答
1
投票

IEnumerable Interface

暴露枚举,它支持在一个指定类型的集合的简单迭代。

就是这样,这就是它所做的。现在,有与IEnumerable工作很多扩展方法,虽然它只是恰巧Add是不是其中之一

List<T>,实现IEnumerable这是有道理的,它有添加的能力。

所以,从这里,你有2个选择

  1. 返回一个List<T> public static List<Person> GetPersons()
  2. 枚举您IEnumerableList<T> var personList = Person.GetPersons().ToList();

你应该使用哪一个?嗯,你尝试添加的东西,你只是不枚举,或在一个LINQ语句中使用它,其实说你应该用选项1去


但每当主叫用户呼叫的方法和获取方法的类型。它还是老样子显示为System.Collections.Generic.List。你能解释一下为什么是的GetType显示为列表

因为这是创建的,当你返回IEnumerable,你只是铸造List<T>作为一个更基本的类型(在这种情况下,一个接口)的类型。当你打电话的GetType,这是告诉你它是什么类型,因为它是类型。编译器仍然知道什么键入您创造!在-如果你想将它转换回。

我认为你需要打的文件多一点


0
投票

IEnumerable接口负责遍历集合,而不是存储和添加/移除那张。所以,以允许添加到列表中,你可以改变你的返回类型List<Person>像这样:

public static List<Person> GetPersons()
[...]

所有的一切都应该工作。

当您返回方法确实返回一个列表,说的返回类型是你说你的函数应该只遍历用户一个IEnumerable,不会改变。这也是为什么你的编译错误。


0
投票

IEnumerable不支持添加新元素吧。

从MSDN IEnumerable接口:

公开一个枚举,它支持在非泛型集合上进行简单迭代。

而不是使用IEnumerable<Person>作为GetPerson()功能使用List<Person>的返回类型。

喜欢

    public static List<Person> GetPersons()
    {
        List<Person> personList = new List<Person>()
                                      {
                                          new Person() { Age = 10, Name = "Vijay"}
                                      };

       return personList;

    }
© www.soinside.com 2019 - 2024. All rights reserved.