虽然,下面的问题可能是愚蠢的,但它仍然会帮助别人也。我有方法返回一个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();
}
}
所以,任何人都可以帮助我的理解。这将是很大的帮助。提前致谢。
暴露枚举,它支持在一个指定类型的集合的简单迭代。
就是这样,这就是它所做的。现在,有与IEnumerable
工作很多扩展方法,虽然它只是恰巧Add
是不是其中之一
List<T>
,实现IEnumerable
这是有道理的,它有添加的能力。
所以,从这里,你有2个选择
List<T>
public static List<Person> GetPersons()
IEnumerable
到List<T>
var personList = Person.GetPersons().ToList();
你应该使用哪一个?嗯,你尝试添加的东西,你只是不枚举,或在一个LINQ语句中使用它,其实说你应该用选项1去
但每当主叫用户呼叫的方法和获取方法的类型。它还是老样子显示为System.Collections.Generic.List。你能解释一下为什么是的GetType显示为列表
因为这是创建的,当你返回IEnumerable
,你只是铸造List<T>
作为一个更基本的类型(在这种情况下,一个接口)的类型。当你打电话的GetType,这是告诉你它是什么类型,因为它是类型。编译器仍然知道什么键入您创造!在-如果你想将它转换回。
我认为你需要打的文件多一点
IEnumerable接口负责遍历集合,而不是存储和添加/移除那张。所以,以允许添加到列表中,你可以改变你的返回类型List<Person>
像这样:
public static List<Person> GetPersons()
[...]
所有的一切都应该工作。
当您返回方法确实返回一个列表,说的返回类型是你说你的函数应该只遍历用户一个IEnumerable,不会改变。这也是为什么你的编译错误。
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;
}