从列表中读取数据 == "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
。
您可能引用了具有两个不同名称(list1
和 list2
)的同一个列表,或者您实际上有两个不同的列表,但都引用了相同的值。因此,当您第一次更改 list1
中的值时,您也会更改 list2
。
您可以通过以下方式检查两个变量是否引用同一个对象:
object.ReferenceEquals(list1, list2);
如果 returns 错误,也尝试
object.ReferenceEquals(list1[0], list2[0]);
和
object.ReferenceEquals(list1[0][0], list2[0][0]);
抱歉标题模糊,我不知道如何用一句话解释这个问题。希望您在查看我的代码时能理解问题所在。
我用一种很奇怪的方法填写了两个列表(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
。
您可能引用了具有两个不同名称(list1
和 list2
)的同一个列表,或者您实际上有两个不同的列表,但都引用了相同的值。因此,当您第一次更改 list1
中的值时,您也会更改 list2
。
您可以通过以下方式检查两个变量是否引用同一个对象:
object.ReferenceEquals(list1, list2);
如果 returns 错误,也尝试
object.ReferenceEquals(list1[0], list2[0]);
和
object.ReferenceEquals(list1[0][0], list2[0][0]);