连接两个班级?

时间:2017-03-06 09:58:02

标签: c# wpf class xaml oop

我正在尝试创建一个系统,允许您创建一个医院病房,然后将患者的个人详细信息添加到每个病房。 目的是能够从单个text / csv文件中读取所有信息。

我目前有代码来创建患者并添加他们的详细信息,但创建病房并将病人分配到病房是我无法掌握的。 我的讲师建议在Ward课程中使用一系列患者作为财产,但目前还不能理解。 典型的患者将在我的文本文件中写为 '' JoeBloggs,28,03 / 03 / 1989,8'' 以下代码对属性等进行排序。

以下是我目前创建患者的代码:

 private void btnLoad_Click(object sender, RoutedEventArgs e)
    {
        //read files from file
        string[] patientList = File.ReadAllLines("MyList.txt");
        string[] patientArray = new string[4];
        string patientLong, name;
        Patient patient;
        int age, blood;
        DateTime dob;
        .

        for (int i = 0; i < patientList.Length; i++)
        {
            patientLong = patientList[i];//one long string with commas eg johnmurphy,22,12/9/1998,6
            patientArray = patientLong.Split(',');//split array according to comma
            name = patientArray[0];
            age = Convert.ToInt32(patientArray[1]);
            dob = DateTime.Parse(patientArray[2]);
            blood = Convert.ToInt32(patientArray[3]);


            patient = new Patient(name,age,dob,blood);
            bookList.Add(patient);

        }

       // lbxExpenses.ItemsSource = null;
        lstPatients.ItemsSource = patientList;
    }

上课病房

class Ward
{
    public string Name { get; set; }

    public Patient [] Patient { get; set; }//array of patients as a property?

    public Ward(string name,int patient )
    {
        Name = name;
        Patient = new int[i];//currently giving error
    }

    public string GetWardDetails()
    {
        return string.Format("{0}", Name);
    }
}

1 个答案:

答案 0 :(得分:2)

解决方案不是使用数组,而是使用通用列表。

class Ward
{
    public string Name { get; set; }

    public List<Patient> Patients { get; set; }//array of patients as a property?

    public Ward(string name)
    {
        Name = name;
        Patients = new List<Patient>();
    }

    public string GetWardDetails()
    {
        return string.Format("{0}", Name);
    }
}

现在,当您想要从病房中添加或移除患者时,您可以这样做:

Ward ward = new Ward("Emergency");
ward.Patients.Add(/*a valid patient object*/);

如果你想删除

ward.Patients.Remove(/*An already-existing patient object in the ward*/);

Some more about Lists可以在这里找到。问题是数组不会调整大小,而列表会调整大小。因此,当您阅读文件时,您可以随时将新病人添加到病房。此外,当您实例化新对象时,您希望将该对象实例化为其类型。当你执行= new int[0]时,你告诉它将类型Patient分配为int,当它没有其中的字段/属性时可能是int类型。这并不是说你永远不会将一种类型分配给另一种类型,但是如果你想要实现polymorphism,你通常只会这样做。

如果您希望继续使用数组,则必须按照以下方式执行操作:

class Ward
{
    public string Name { get; set; }

    public Patient[] Patients { get; private set; }

    public Ward(string name, IEnumerable<Patient> Patients)
    {
        Name = name;
        this.Patients = Patients.ToArray();
    }

    public Ward(string name, Patient[] Patients)
    {
        Name = name;
        Patients = Patients;
    }

    public string GetWardDetails()
    {
        return string.Format("{0}", Name);
    }
}

干杯队友:)