如何在没有类实例的类中访问列表?

时间:2016-05-07 13:33:39

标签: c#

我正在用c#制作网球课程进行考试,我需要和玩家一起阅读文件。我可以使用此代码将玩家读入列表。现在我需要从另一个类中获取MalePlayers列表以从列表中获得两名玩家并进行比赛,但我无法弄清楚如何进行比赛。

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

是否可以不创建类的实例?

3 个答案:

答案 0 :(得分:2)

你有几种方法可以做到这一点,而且大多数只是一种风格选择。

一个选项是创建一个静态方法,在内部创建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;
}

答案 1 :(得分:0)

你只能这样做:public static List<Player> MalePlayers = new List<Player>();

但是你需要了解你在这里做了什么,使这个列表static意味着你班级的所有实例将共享相同的列表

答案 2 :(得分:0)

我想知道为什么你没有班级MaleReader的实例?我假设您必须创建它以从文件加载播放器。

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

或者你可以像其他人提到的那样采取静态方法。