我正在创建一个媒体应用程序,其中有一个类(称为MediaFile),包含有关媒体文件的信息(名称、大小、播放次数和标签)。它们分别是字符串、双精度、整数和List类型。
我有一个这些对象的列表,因此例如调用MediaFile [2] .Tags将引用“标签”字符串(相关关键字)的列表。
我的问题是,当我要求用户为选定的MediaFile输入标签时,每当我尝试将这些标签保存到特定对象时,标签都会保存到每个对象中。目前分配的代码看起来像这样:
MediaFile[lstLibrary.SelectedIndices[0]].Tags.Add(tempTag);
'tempTag'是一个字符串,我试图将其添加到字符串列表中,但是就像我说的一样 - 即使只选择了一个文件,'tempTag'字符串也会被添加到每个MediaFile的字符串列表中。
有人能否解释一下我做错了什么?
非常感谢。
编辑:感谢您所有的回复。每当我创建一个MediaFile
实例时,我都会将new List<string>
传递给构造函数。然后稍后当我去更改这个字符串列表时,我发现所有的MediaFiles似乎都具有相同的字符串引用。以下是MediaFile类:
public static List<MediaType> MediaFile = new List<MediaType>();
public class MediaType
{
public string Name;
public string Path;
public double Size;
public int Plays;
public List<string> Tags;
// Constructor for adding new files
public MediaType(string path, List<string> tags)
{
Path = path;
Tags = tags;
}
当我要求用户选择要添加到媒体库的文件后:
MediaFile.Add(new MediaType(Path.GetFullPath(file), new List<string>()));
一开始没有“标签”,但后来(这就是我的问题所在):
if (tempTag != "")
MediaFile[lstLibrary.SelectedIndices[0]].Tags.Add(tempTag);
}
有什么想法吗?抱歉这篇文章太长了!
var file = MediaFile[lstLibrary.SelectedIndices[0]];
然后使用调试器查看你得到的对象。如果返回正确的MediaFile
,尝试执行Tags.Add(...)
看看会发生什么。 - Nobody