将类数据存储在列表中

本文关键字:列表 存储 数据 | 更新日期: 2023-09-27 18:22:00

我有一个这样的类,我想存储在一个定义为静态变量的列表中。我遵循这里的参考:用类将数据存储到列表中

public class Faculty
{
    public string Name { get; set; }
    public string Dept { get; set; }
    public string[] subInterest = new string[4];
}

但是,当我尝试按如下方式初始化列表时,数组部分出现问题:无效的初始化器成员声明符

SaveDirectory.list_of_faculty.Add(
    new Faculty
    {
        Name = txtTeachherName.Text,
        Dept = cmbDepts.Items.CurrentItem.ToString(),
        subInterest[0] = "HELLO"
    });

我做错了什么?

将类数据存储在列表中

您无法访问对象并使用初始化器语法初始化它所包含的数组的成员。你可以这样做:

var fac = new Faculty {
     Name = txtTeachherName.Text, 
     Dept = cmbDepts.Items.CurrentItem.ToString(), 
     subInterest = new []{"HELLO", null, null, null}}

或初始化后:

fac.subInterest[0] = "HELLO";

问题是由于:

subInterest[0] = "HELLO"

您不能在Object Initializer中部分初始化数组,要么数组已满,要么什么都没有。您可以执行:

subInterest = new string[]{"HELLO"}

但是,这将使数组subInterest的大小为1,而不是像您在类中定义的那样为4。要获得相同大小的数组,可以执行以下操作:

subInterest = new string[]{"HELLO",null,null,null}

另一个选项是使用List<string>而不是Array。你可以用值初始化它,然后你可以向它添加项目。

修改你的类,如:

public class Faculty
{
    public string Name { get; set; }
    public string Dept { get; set; }
    public List<string> subInterest;
}

然后:

new Faculty
{
    Name = txtTeachherName.Text,
    Dept = cmbDepts.Items.CurrentItem.ToString(),
    subInterest = new List<string>(){"HELLO"}
};

使用constructor也可以解决类似的问题

public class Faculty
{
    public string Name { get; set; }
    public string Dept { get; set; }
    public string[] subInterest = new string[4];
    public Faculty(string name, string dept, string[] si)
    {
        this.Name = name;
        this.Dept = dept;
        this.subInterest = si;
    }
}

然后实例化教员类

string[] subinterest = new string[]{"reading","swmming",null,null};
var fac = new Faculty("dgdfgdfgfg","dfgdgfgdfg", subinterest);