繁体   English   中英

将数组对象的参数输出到字符串

[英]Output parameters of array objects to a string

我有以下代码:

public partial class Form1 : Form
{
    const int MaxStudents = 4;

    public Form1()
    {
        InitializeComponent();
    }

   private void Form1_Load(object sender, EventArgs e)
   {
     Student[] studentList;
     studentList = new Student[4];

     studentList[0] = new Student(51584, 17);
     studentList[1] = new Student(51585, 19);
     studentList[2] = new Student(51586, 15);
     studentList[3] = new Student(51587, 20);

        for (int i = 0; i < MaxStudents; i++)
        {
            lstStudents.Items.Add(studentList.ToString()[i]);
        }
    }

编辑:在学生类中,我有:

public Student(int id, int age) {
this.id = id;
this.age = age;
}

public override string ToString()
{
    return string.Format("ID: {0} - Age: {1}", this.id, this.age);
} 

然后在形式加载中我有:

private void Form1_Load(object sender, EventArgs e)
{
Student[] studentList;
studentList = new Student[4];

studentList[0] = new Student(51584, 17);
studentList[1] = new Student(51585, 19);
studentList[2] = new Student(51586, 15);
studentList[3] = new Student(51587, 20);

lstStudents.Items.AddRange(studentList);
}

我想知道如何将数组中每个对象的参数输出到列表框。 我将如何使每个对象显示在列表框中,如下所示:

ID(标识号):51584-年龄:17

我不太确定如何基本将参数转换为纯文本以在列表框中列出,同时在参数之前添加其他文本(就像我对'id:',连字符和'Age:'所做的一样)

很抱歉这个冗长的问题,但我想我会尽力而为。

如果要在任何时候想要以字符串形式显示Student ,最简单的方法是覆盖ToString

public override string ToString()
{
    return string.Format("Name: {0} - Age: {1}", this.Name, this.Age);
} 

那你就可以做

lstStudents.Items.Add(studentList[i]);

添加对象而不是字符串的好处是,列表框的SelectedItem属性将是对象,而不仅仅是字符串表示形式。

或者,您可以格式化发送到列表框的字符串:

lstStudents.Items.Add(string.Format("Name: {0} - Age: {1}", studentList[i].Name, studentList[i].Age));
// Class student - create property
public string Display
{
   get { return string.Format("ID: {0} - Age: {1}", this.ID, this.Age); }
} 

 // In the form class - set listbox
 lstStudents.Datasource = StudentArray;
 lstStudents.DisplayMember = "Display";
 lstStudents.ValueMember = "ID";

 // The benefit of this is that later you can do this
 Student s = (Student)lstStudents.SelectedItem
 // Now you have access to full student info

仔细看看这一行:

lstStudents.Items.Add(studentList.ToString()[i]);

您编写了studentList.ToString()[i] 这意味着您在studentList而非学生上调用ToString 它应该是lstStudents.Items.Add(studentList[i].ToString()) (索引器[i]放在studentList后面)。

假设您已经在Student类中覆盖了ToString ,则可以在一个调用中添加所有学生:

private void Form1_Load(object sender, EventArgs e)
{
    Student[] studentList;
    studentList = new Student[4];

    studentList[0] = new Student(51584, 17);
    studentList[1] = new Student(51585, 19);
    studentList[2] = new Student(51586, 15);
    studentList[3] = new Student(51587, 20);

    lstStudents.Items.AddRange(studentList);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM