初始化多个List <Boolean>与多个List <String>

Use*_*999 1 .net c# list

我以前在我的代码中有以下类

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)
  • 如果我添加一个String ListStringsA,那么它只会被添加到ListStringsA
  • 如果我添加一个布尔值,ListA它会自动添加到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)

Ert*_*maa 5

发生这种情况是因为您只为bool和创建一个列表string,然后只将其分配给变量.查看更多.

如果要为每个属性创建新列表,请参阅:

ListStringsA = new List<string>(); ListStringsB = new List<string>(); ListStringsC = new List<string>(); ListA = new List<bool>(); ListB = new List<bool>();