正确实例化列表

时间:2015-01-02 15:47:29

标签: c#

很抱歉,如果这是一个有点愚蠢的问题,但我认为我误解了有关Lists和Goggling的基本信息并没有帮助。这就是我所拥有的:

包含List元素的类:

public string Name { get; set; }
public int Age { get; set; }
public List<int> Main_Spec { get; set; }
public List<int> Aux_Spec { get; set; }

public Department()
{
    List<int> Main_Spec = new List<int>();
    List<int> Aux_Spec = new List<int>();
}

然后我尝试将元素添加到Main_Spec,如下所示:

Department departnment = new Department();
List<int> inter = new List<int>();

var parts2 = parts[2].Split(',');
foreach (string part in parts2)
{
   inter.Add(int.Parse(part));
}
departnment.Main_Spec = inter;
inter.Clear();

我使用中间列表,因为当我尝试直接添加到department.Main_Spec时,我得到一个错误,说明该对象未实例化(或沿着这些行的某些内容)。我的问题是在调试模式下查看它,当我清除inter时,department.Main_Spec也会被清除。这不是我想要实现的目标,我不明白为什么会这样做。

提前谢谢!

2 个答案:

答案 0 :(得分:5)

你的构造函数中只有一个小错误。您应该定义类的本地属性,而不是尝试声明和定义新的属性(构造函数的本地属性):

public Department()
{
    this.Main_Spec = new List<int>();
    this.Aux_Spec = new List<int>();
}

现在您可以回到不使用中间类的原始方式。例如:

Department departnment = new Department();
department.Main_Spec.AddRange(parts[2].Split(',').Select(p => int.Parse(p));

在这里,我也避免使用带有AddRange()的for循环。

答案 1 :(得分:3)

将构造函数更改为:

public Department()
{
    Main_Spec = new List<int>();
    Aux_Spec = new List<int>();
}

您使用的是本地(函数级别)变量,而不是引用类级变量。