我以前在我的代码中有以下类
public class SomeListClass
{
public List<Boolean> ListA {get; set;}
public List<Boolean> ListB {get; set;}
public List<String> ListStringsA {get; set;}
public List<String> ListStringsB {get; set;}
public List<String> ListStringsC {get; set;}
public List<String> ListStringsD {get; set;}
public void InitLists()
{
ListStringsA = ListStringsB = ListStringsC = ListStringsD = new List<String>();
ListA = ListB = new List<Boolean>();
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到使用这个初始化和下面的代码:
SomeListClass itm = new SomeListClass();
itm.InitLists();
itm.ListStringsA.Add("TestString");
itm.ListA.Add(true);
Run Code Online (Sandbox Code Playgroud)
ListStringsA,那么它只会被添加到ListStringsAListA它会自动添加到ListB结果将是:
ListStringsA = {"TestString"}
ListStringsB = {}
ListStringsC = {}
ListStringsD = {}
ListA = {true}
ListB = {true}
Run Code Online (Sandbox Code Playgroud)
这是什么原因?有人能指点我一些解释这种奇怪行为的文件吗?我似乎找不到任何东西.
注意:这解决了它:
public void InitLists()
{
ListStringsA = ListStringsB = ListStringsC = ListStringsD = new List<String>();
ListA = new List<Boolean>();
ListB = new List<Boolean>();
}
Run Code Online (Sandbox Code Playgroud)
注意:一些简化的生产代码:
我得到一个SomeListObject名为的类型列表(见下文)objectList
public class SomeListObject {
public String SomeListObjectName {get; set;}
public Boolean SomeListObjectNeeded {get; set;}
public Boolean SomeListObjectOk {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
该列表包含2个项目:
objectList = {{SomeListObjectName = "PersonA", SomeListObjectNeeded = true, SomeListObjectOk = false},{SomeListObjectName = "PersonB", SomeListObjectNeeded = true, SomeListObjectOk = false}}
Run Code Online (Sandbox Code Playgroud)
然后我做了一个foreach:
SomeListClass itm = new SomeListClass();
itm.InitLists();
foreach (SomeListObject myObj in objectList )
{
ListStringsA.Add(myObj.SomeListObjectName);
// ListStringsA: {"PersonA"}
// ListStringsB: {}
// ListA: {}
// ListB: {}
ListA.Add(myObj.SomeListObjectNeeded);
// ListStringsA: {"PersonA"}
// ListStringsB: {}
// ListA: {true}
// ListB: {true}
ListB.Add(myObj.SomeListObjectNeeded);
// ListStringsA: {"PersonA"}
// ListStringsB: {}
// ListA: {true, false}
// ListB: {true, false} <=== Say What now???
}
Run Code Online (Sandbox Code Playgroud)