正确实例化列表
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 级变量。
抱歉,如果这是一个有点愚蠢的问题,但我想我误解了关于列表的一些基本知识,而 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 级变量。