【发布时间】:2016-07-01 11:29:29
【问题描述】:
我有 2 个类:Track.cs 和 TrackList.cs,Track.cs 用于保存轨道中的数据。在 TrackList 中,我想将 Track.cs 的对象保存在 List 中。
这是我目前拥有的代码:
class TrackList
{
private List<Tracks> tracks;
public TrackList()
{
tracks = new List<Tracks>();
}
public TrackList(List<Tracks> tracks)
{
this.tracks = new List<Tracks>(tracks);
}
}
我从中了解到的是,当我创建此类的对象时:TrackList TC = new TrackList() 如果我不添加参数,列表将被初始化,但是当我发送 Track.cs 对象为将添加到曲目列表中的参数。
但是有人说我应该使用this.tracks = tracks; 而不是this.tracks = new List<Tracks>(tracks);。但我不明白为什么,因为如果我使用 this.tracks = tracks; 我还没有使用 = new List<Tracks>; 部分,所以它不会被初始化。还是我想错了?
和我做这个一样吗
int id;
public MyClass()
{
id = 0;
}
public MyClass(int id)
{
this.id = id;
}
在我的作业中它还说参数列表需要分配给 TrackList 类中的列表。
编辑 2
我的新虽然在评论后
private List<Tracks> tracks; 是对任何 atm 的引用。
this.tracks = tracks 使曲目列表 ^ 引用与参数一起发送的列表
this.tracks = new List<Tracks>(tracks); 将创建一个新列表,因此曲目列表现在将引用该新列表,并且新列表与带参数发送的列表具有相同的内容。
因此,使用我使用的方法(最后一个),存在 2 个具有相同内容的列表,但 private List<Tracks> tracks; 将引用该新列表,我不知道使用参数发送的列表会发生什么。
编辑 3
看来我在编辑 2 中的假设是正确的。非常感谢你们的帮助。干杯!
【问题讨论】:
-
“某人”是正确的。您已经声明了它,在这里您只是将现有的“tracks”参数传递给 Class 到另一个容器。不需要另一个“新”。将现有列表传递给“this.tracks”正在对其进行初始化。
-
另外,你需要使用构造函数链。
public TrackList() : this(new List<Tracks>()) { }。使用链接可以防止在构造函数重载时出现错误。这样做的味道是您有多个构造函数实例化/设置相同的字段/属性。 -
但是我从来没有说过
tracks = new List<Tracks>();所以这不是说它没有初始化吗?还是在我添加对象时它会自动初始化? -
new初始化给定类型的对象。你接受了一个List<Tracks>类型的对象,所以无论谁发布这个实例,都是将对象传递给你的那个人。如果需要,您可以验证它不为空。我强烈建议您通过 C# 获取 CLR 的副本。跳过前两章并阅读。大约需要一天时间。 -
不,您将一个现有列表(在别处实例化)分配给您的局部变量
标签: c# list initialization assign