C# 正确实例化列表
抱歉,如果这是一个有点愚蠢的问题,但我想我误解了一些关于列表的基本内容,而目瞪口呆并没有帮助。这就是我所拥有的: 包含列表元素的类:C# 正确实例化列表,c#,C#,抱歉,如果这是一个有点愚蠢的问题,但我想我误解了一些关于列表的基本内容,而目瞪口呆并没有帮助。这就是我所拥有的: 包含列表元素的类: 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() { L
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>();
}
公共字符串名称{get;set;}
公共整数{get;set;}
公共列表主规范{get;set;}
公共列表辅助规范{get;set;}
公共部门()
{
List 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();
部门部门=新部门();
List inter=新列表();
var parts2=parts[2]。拆分(',');
foreach(第2部分中的字符串部分)
{
inter.Add(int.Parse(part));
}
department.Main_Spec=内部;
inter.Clear();
我使用中间列表是因为当我试图直接添加到department.Main_Spec时,我得到了一个错误,表示对象没有实例化(或类似的东西)。我的问题是,在调试模式下查看它时,当我清除inter时,department.Main_规范也会被清除。这不是我想要达到的,我真的不明白为什么它会这样做
提前谢谢你 您的构造函数中有一个小错误。您应该定义类的本地属性,而不是尝试声明和定义新属性(构造函数的本地属性):
在这里,我还避免了将for循环与
AddRange()
一起使用,将构造函数更改为:
public Department()
{
Main_Spec = new List<int>();
Aux_Spec = new List<int>();
}
公共部门()
{
Main_Spec=新列表();
Aux_Spec=新列表();
}
您使用的是局部(函数级)变量,而不是引用类级变量。您在构造函数中声明了一个局部变量。只要放下
列表
就可以了。顺便说一句,你不应该因为问愚蠢的问题而感到愚蠢。这是一个很好的学习方式,有时你甚至在解释问题时发现了答案!inter和department是对列表的引用,说department.Main_Spec=inter意味着这些引用现在相等。此赋值不会复制列表本身,它只会将引用设置为相等。无论你对列表做了什么,交互引用也可以通过departmenty.Main_Spec查看。如果我告诉你如何访问包含1000美元的银行帐户,那么我将提取所有的钱,你将无法再获得1000美元。谢谢大家!非常有用:)顺便说一下,列表是属性
而不是字段
是的,必须使用“this”关键字引用类成员。构造函数中的新实例化只会创建构造函数函数的局部变量。@Freestyle076:this在这里不是必需的,我只是添加它来说明我们正在引用类自己的属性。哦,对了,C也有隐式自引用。好球@Cory!
Department departnment = new Department();
department.Main_Spec.AddRange(parts[2].Split(',').Select(p => int.Parse(p));
public Department()
{
Main_Spec = new List<int>();
Aux_Spec = new List<int>();
}