Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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# - Fatal编程技术网

C# 如何在没有类实例的情况下访问类中的列表?

C# 如何在没有类实例的情况下访问类中的列表?,c#,C#,我正在用c#制作一个网球课程,准备考试,我需要阅读一份球员档案。我可以使用此代码将玩家读入列表。现在我需要访问另一个职业的男性玩家列表,从列表中获得两名玩家并进行一场比赛,但我不知道如何访问它 public class MaleReader { private List<Player> MalePlayers = new List<Player>(); public string FileName { get; set; } public stri

我正在用c#制作一个网球课程,准备考试,我需要阅读一份球员档案。我可以使用此代码将玩家读入列表。现在我需要访问另一个职业的男性玩家列表,从列表中获得两名玩家并进行一场比赛,但我不知道如何访问它

public class MaleReader
{
    private List<Player> MalePlayers = new List<Player>();
    public string FileName { get; set; }
    public string Delimiter { get; set; }

    public MaleReader(string fn, string delim = "|")
    {
        FileName = fn;
        Delimiter = delim;
    }

    public override string ToString()
    {
        var rv = "";
        foreach (var p in MalePlayers)
            rv += "Player: " + p + "\n";
        return rv;
    }

    public void Load()
    {
        TextFieldParser par = new TextFieldParser(FileName);
        par.TextFieldType = FieldType.Delimited;
        par.SetDelimiters(Delimiter);
        while (!par.EndOfData)
        {
            string[] fields = par.ReadFields();
            int MID = Int32.Parse(fields[0]);
            string Firstname = fields[1];
            string MiddleName = fields[2];
            string LastName = fields[3];
            DateTime DoB = DateTime.Parse(fields[4]);
            string Country = fields[5];
            string ShortCountry = fields[6];

            //Gender gender =
            var p = new Player(MID, Enums.Gender.Male, Firstname, MiddleName, LastName, DoB, Country, ShortCountry);
            MalePlayers.Add(p);

        }
        par.Close();
    }

    public static void RunPlayerReaderMale()
    {
        var f = new MaleReader(@"C:\Users\R0ede\Dropbox\Git\Examprogram\Data\FemalePlayer.txt");
        f.Load();
        //Console.WriteLine(f);
    }
}
公共类读取器
{
私人列表玩家=新列表();
公共字符串文件名{get;set;}
公共字符串分隔符{get;set;}
公共MaleReader(字符串fn,字符串delim=“|”))
{
文件名=fn;
分隔符=delim;
}
公共重写字符串ToString()
{
var rv=“”;
foreach(男性玩家的var p)
rv+=“玩家:”+p+“\n”;
返回rv;
}
公共空荷载()
{
TabeFieldPalsPAR=新文本字段分析器(文件名);
Pr.TeXFieldType = FieldType。
PAR.SEDDELIMIDES(定界符);
而(.PA.EndoFDATA)
{
String []字段= PAR.RealFieldSd();
int MID=Int32.Parse(字段[0]);
字符串Firstname=字段[1];
字符串名称=字段[2];
字符串LastName=字段[3];
DateTime DoB=DateTime.Parse(字段[4]);
字符串国家=字段[5];
字符串ShortCountry=字段[6];
//性别=
var p=新玩家(MID,Enums.Gender.Male,Firstname,MiddleName,LastName,DoB,Country,ShortCountry);
添加(p);
}
PAR.闭包();
}
公共静态无效RunPlayerReaderMale()
{
var f=新的MaleReader(@“C:\Users\R0ede\Dropbox\Git\Examprogram\Data\FemalePlayer.txt”);
f、 加载();
//控制台写入线(f);
}
}

不创建类的实例是否可以执行此操作?

您只能通过以下方式执行:
公共静态列表MalePlayers=new List()


但是你需要了解你在这里做什么,把这个列表列成静态的,这意味着你的类的所有实例都将共享同一个列表,你有几种方法可以做到这一点,其中大多数只是一种风格选择

一个选项是创建一个静态方法,该方法在内部创建
MaleReader
实例,但它只返回其
MalePlayers
属性

public static List<Player> RunPlayerReaderMale()
{
    var f = new MaleReader(@"C:\Users\R0ede\Dropbox\Git\Examprogram\Data\MalePlayer.txt");
    f.Load();
    return f.MalePlayers;
}
public静态列表RunPlayerReaderMale()
{
var f=新的MaleReader(@“C:\Users\R0ede\Dropbox\Git\Examprogram\Data\MalePlayer.txt”);
f、 加载();
返回f.MalePlayers;
}

我想知道你为什么没有一个类
MaleReader
的实例?我想您必须创建它才能从文件中加载播放器

我会保留您用来读取文件的实例,或者,如果您不想保留它,请在删除该实例之前提取
列表


或者你也可以像其他人提到的那样使用静态aproach。

不,如果你没有该类的实例,
列表中的男性玩家
就没有了exist@R0ede基于您当前的上下文。我将使用下面的Rubens Farias方法,使
RunPlayerReaderMale()
方法返回
List
。如何提取列表?好吧,公开列表,或者创建一个getter。调用
MaleReader.Load()
后,只需将列表分配给需要的任何变量即可。你想让我举个例子吗?