从列表中读取数据==“;data1”;,但我要求改变“;data1”;至>";list1data1”;它将其

本文关键字:data1 gt quot list1data1 改变 读取 列表 数据 我要 | 更新日期: 2023-09-27 18:00:34

很抱歉标题含糊不清,我不知道如何用一句话来解释这个问题。我希望你在查看我的代码时能理解这个问题。

我用一种非常奇怪的方法填写了两个列表(list1和list2)。List1和List2是2D列表。两个列表的计数都是4(我对此进行了测试)。列表的第一个索引都已填充,并包含下一个数据:data1、data2、data3、data4(我对此进行了测试)。所以:[0][0]包含"data1" && [0][1]包含"data2" && [0][2]包含"data3" && [0][3]包含"data4"。两个列表的!!!现在,当我检查lists[x][0]是否包含"datax"时,如果是:更改[x][0]的名称。这在列表1中有效,但在列表2中无效。

for (int i = 0; i < wholeList.Count; i++)
{
    if (wholeList[i] < someclass.otherlist1.Count) //wholeList[i] are numbers given 
    //by the user, can be betwen 0-7 (0-3 for list1 4-7 for list2)
    {
        list1.Add(someclass.otherlist1[wholeList[i]]);
    }
    else
    {
        list2.Add(someclass.otherlist2[wholeList[i]-someclass.otherlist2.Count]);
    }
}

for (int i = 0; i < list1.Count; i++)
{
    Console.WriteLine(list1[i][0]); //outcome is:
    //data 1
    //data 2
    //data 3
    //data 4
}
for (int i = 0; i < list2.Count; i++)
{
    Console.WriteLine(list2[i][0]); //outcome is:
    //data 1
    //data 2
    //data 3
    //data 4
}
for (int i = 0; i < list1.Count;i++ )
{
    Console.WriteLine("test list 1");
    if (list1[i][0].ToUpper().Contains("data 1".ToUpper()) || list1[i][0].ToUpper().Contains("data 2".ToUpper()))
    {
        list1[i][0] = "LIST1DATA1-2";
    }
    else if (list1[i][0].ToUpper().Contains("data 3".ToUpper()) || list1[i][0].ToUpper().Contains("data 4".ToUpper()))
    {
        list1[i][0] = "LIST1DATA3-4";
    }
}
for (int i = 0; i < list2.Count; i++)
{
    Console.WriteLine("test list 2");
    if (list2[i][0].ToUpper().Contains("data 1".ToUpper()) || list2[i][0].ToUpper().Contains("data 2".ToUpper()))
    {
        list2[i][0] = "LIST2DATA1-2";
    }
    else if (list2[i][0].ToUpper().Contains("data 3".ToUpper()) || list2[i][0].ToUpper().Contains("data 4".ToUpper()))
    {
        list2[i][0] = "LIST2DATA3-4";
    }
    else
    {
        Console.WriteLine("wtf"); //why it always prints this????
    }
}
for (int i = 0; i < list1.Count; i++)
{
    Console.WriteLine(list1[i][0]);
}
for (int i = 0; i < list2.Count; i++)
{
    Console.WriteLine(list2[i][0]);
}
//outcome above is:
//LIST2DATA1-2
//LIST2DATA1-2
//LIST2DATA3-4
//LIST2DATA3-4
//wtf
//wtf
//wtf
//wtf

这怎么可能????

另外,当我不在list1[0][0]中添加"data1"时。它确实打印了list2data1-2

从列表中读取数据==“;data1”;,但我要求改变“;data1”;至>";list1data1”;它将其

您可能引用了具有两个不同名称(list1list2)的同一列表,或者您实际上有两个不同的列表,但都引用了相同的值。因此,当您第一次更改list1中的值时,也会更改list2。如果两个变量引用同一对象,您可以通过以下方式进行检查:

object.ReferenceEquals(list1, list2);

如果返回false,也可以尝试

object.ReferenceEquals(list1[0], list2[0]);

object.ReferenceEquals(list1[0][0], list2[0][0]);