我有一个应用程序,它有几个列表来跟踪应用程序运行期间的某些值。特别是它有List1,List2和MainList。
List1和List2的类型为String,MainList是另外两个列表的列表。
在我的应用程序中,我希望在应用程序运行时更新和更改列表的值,但我无法弄清楚如何执行此操作。
它是一个处理文件照片的图像处理应用程序。应用程序需要处理文件中所有照片的列表值。因此,它将有一个迭代所有照片的循环,并在每次迭代时更新列表。
我的算法应如下所示: *如果是第一张图像,请将字符串添加到List1。然后将List1添加到MainList *对于每个连续图像,将该图像的字符串添加到List2。然后将List2添加到MainList。将List1设置为添加到MainList的最后一个List。清除清单2
问题是,当我清除List2数据时,它还会清除已设置的List1的数据。我怎么能阻止这种情况发生。我附上了我希望更有意义的代码。在我的代码中,我省略了检查以查看它是否是第一个图像,因为我只是在测试算法。
List<List<String>> MainStringList = new List<List<String>>();
List<String> StringList1 = new List<String>();
List<String> StringList2 = new List<String>();
StringList1.Add("My Car");
StringList1.Add("My Engine");
StringList1.Add("My Wheel");
MainStringList.Add(StringList1);
StringList2.Add("My Flower");
StringList2.Add("My Honey");
StringList2.Add("My Love Heart");
DoStuff(StringList1, StringList2);
private void DoStuff(List<String> StringList1, List<String> StringList2)
{
// Perform some calculations
// Then add to list
MainStringList.Add(StringList2);
int mainStringListCount = MainStringList.Count;
StringList1 = MainStringList[mainStringListCount - 1];
String test1 = StringList1[2];
StringList2.Clear();
String test2 = StringList1[2]; // Problem is here - clears StringList2 as well as StringList1
}
答案 0 :(得分:0)
好的,让我引导你完成它
MainStringList.Add(StringList2);
// list count goes up from 1 to 2
int mainStringListCount = MainStringList.Count;
// Set mainStringListCount = 2
StringList1 = MainStringList[mainStringListCount - 1];
// Set StringList1 to the reference at index 1 (2 - 1) of your array
// This sets Stringlist1 to StringList2 since arrays are 0 based.
// StringList1 and StringList2 now both referece the same list.
StringList2.Clear();
// Clears the list that is referecned by both variables
答案 1 :(得分:0)
以下是我注意到的一些问题(会让这个问题成为评论,但如果没有一些间距则太复杂了。)
在你的DoStuff()方法中:
MainStringList.Add(StringList2);
...这会将{strong>对象参考值添加到StringList2
到MainStringList
。我希望你明白这一点。
StringList1 = MainStringList[mainStringListCount - 1];
...这会将最后一个值添加到MainStringList
,这就是您在DoStuff
方法的第一行代码中添加的内容。
方法中倒数第二行是:
StringList2.Clear();
StringList1
是对StringList2
的堆栈引用所指向的完全相同的对象的堆栈引用。基本上,你有一个你实际在这里工作的列表,最后它完全是空的,因为你在堆栈引用上调用Clear()
,它指向唯一的List
堆宾语。您需要创建新的List
对象,而不是一遍又一遍地使用相同的对象。