正确实例化列表

Instantiating lists correctly

抱歉,如果这是一个有点愚蠢的问题,但我想我误解了关于列表的一些基本知识,而 Goggling 没有帮助。这是我的:

一个 class 包含列表元素:

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 也会被清除。这不是我想要实现的目标,我真的不明白为什么要这样做。

提前致谢!

你只是在构造函数中犯了一个小错误。您应该定义 class 的局部属性,而不是尝试声明和定义新属性(构造函数的局部属性):

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

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

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

这里我也避免了使用 for-loop with AddRange().

将构造函数更改为:

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

您使用的是局部(函数级)变量,而不是引用 class 级变量。