Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确实例化列表_C# - Fatal编程技术网

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>();
}