Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在其他类C中使用IEnumerable方法#_C#_.net_Visual Studio - Fatal编程技术网

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");