从列表中读取数据 == "data1",但我要求将 "data1" 更改为 > "list1data1" 并将其更改为 "list2data1"

Reading data out of list == "data1", but I ask to change that "data1" to > "list1data1" its changes it to "list2data1"

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

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

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

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

object.ReferenceEquals(list1, list2);

如果 returns 错误,也尝试

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

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