C# 在其他类C中使用IEnumerable方法#
我有一个班上的人:C# 在其他类C中使用IEnumerable方法#,c#,.net,visual-studio,C#,.net,Visual Studio,我有一个班上的人: public class Person { public string firstName { get; set; } public string lastName { get; set; } public int age { get; set; } public IEnumerable<Person> GetPersons(string path) { var personlist = new List&
public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
public int age { get; set; }
public IEnumerable<Person> GetPersons(string path)
{
var personlist = new List<Person>();
var lines = System.IO.File.ReadAllLines(path);
foreach (var line in lines)
{
var split = line.Split(";");
var firstName = split[0];
var lastName = split[1];
var age = split[2];
Person person = new Person
{
firstName = firstName,
lastName = lastName,
age = int.Parse(age),
};
personlist.Add(person);
}
return personlist;
}
}
我没有编译,错误为CS0103:当前上下文中不存在名称“GetPersons”您需要创建Person类的新实例,然后调用GetPersons。试试看:
var list = new List<Person>();
var person = new Person();
list = person.GetPersons("persons.csv");
var list=newlist();
var person=新的person();
列表=person.GetPersons(“persons.csv”);
您已经创建了GetPersons
一个实例方法,这意味着您需要一个Person
的实例来调用它-这对您正在做的事情没有太大意义
将其设置为静态是有一定意义的:
public class Person
{
public static IEnumerable<Person> GetPersons(string path)
{
// ... //
}
}
但是你应该考虑如果<代码>人>代码>类是这个代码的正确位置。
这可以解决眼前的问题,但它确实很丑陋。更好的解决方案是将该方法转换为静态方法。甚至更好-根本不要将加载代码放在Person
中。OP迟早会需要从不同的来源加载数据,答案就像建议跑步,而不是从喷泉走到浴缸,因为水桶有一个洞,而不是固定这个洞(@xinip10 ha,别担心。我们都会犯一些简单的错误。@xinip10你根本不应该在实体类中加载代码。如果你想从不同的源加载,比如JSON文件或数据库,会发生什么?@PanagiotisKanavos我的想法与你添加的想法相同,因此编辑了最后一行。将加载程序方法放在实体I中tself不是一个好主意。如果您想从不同的源加载,比如JSON文件或数据库,会发生什么?您可能也想从不同的源加载相同的类,例如在测试期间从JSON文件加载,在生产期间从数据库加载。无关:如果保存其引用的变量重置为其他列表在下一行的右边。
public class Person
{
public static IEnumerable<Person> GetPersons(string path)
{
// ... //
}
}
var list = Person.GetPersons("persons.csv");