2016-11-30 31 views
1

我创建了一个属性为String的对象,另一个是List<String>。 我也创建了一个static List<MyObject>,我添加了所有的对象。 现在我的问题是第二个属性被覆盖。自己的类对象属性被取代

比如我有3个对象:

Object1: "Name"; List with 3 Strings 
Object2: "Name2"; List with 2 Strings 
Object3: "Name3"; List with 5 Strings 

如果我现在将它们添加到我的对象列表,它看起来像这样

Name; List with 5 Strings 
Name2; List with 5 Strings 
Name3; List with 5 Strings 

它重写第二个属性中的所有其他对象列表。

代码:

for (int i = 0; i < 100; i++) 
{ 
    if (elo.ReadObjMask(i) > 0) 
    { 
     var iRet = elo.PrepareObjectEx(0, 0, i); 
     maskenname = elo.ObjMName(); 
     if (maskenname != "") 
     { 
      for (int e = 0; e < 50; e++) 
      { 
       string eigenschaft = elo.GetObjAttribName(e); 

       if (eigenschaft != "" && eigenschaft != "-") 
       { 
        eigenschaften.Add(eigenschaft); 
       } 
      } 
      allMasks.Add(maskenname); 

     } 
     else 
     { 
      // Do nothing 
     } 
     EloMask emask = new EloMask(maskenname, eigenschaften); 
     staticVariables.allMask.Add(emask); 
     eigenschaften.Clear(); 
    } 
} 

这里是我的对象类:

public class EloMask 
{ 
    public string name; 
    public List<String> eigenschaften; 

    public EloMask(string iname, List<String> ieigenschaften) 
    { 
     name = iname; 
     eigenschaften = ieigenschaften; 
    } 
} 
+0

你需要指定你的“对象”类和你如何实例化后,加入到静态列表中的代码。 – Thangadurai

+0

staticVariables.allMask.Add(emask);在这部分我将它添加到我的静态列表 – saamii

+0

我相信: EloMask emask = new EloMask(maskenname,eigenschaften); 传递eigenschaften作为参考,所以当它被改变时,所有其他人。 您需要在写入之前启动列表的新实例。 eigenschaften =新列表; –

回答

1

List<string>总是指向同一个实例,因为您传递的是对列表的引用,而不是副本。因此,该列表将被清除并再次填入您将该列表传入的每个EloMask

为了解决您的问题,创建一个新的列表,而不是:

if (elo.ReadObjMask(i) > 0) 
{ 
    var iRet = elo.PrepareObjectEx(0, 0, i); 
    maskenname = elo.ObjMName(); 

    // create a new list here!!! 
    var eigenschaften = new List<string>(); 

    if (maskenname != "") 
    { 
     for (int e = 0; e < 50; e++) 
     { 
      string eigenschaft = elo.GetObjAttribName(e); 

      if (eigenschaft != "" && eigenschaft != "-") 
      { 
       eigenschaften.Add(eigenschaft); 
      } 
     } 

     allMasks.Add(maskenname); 

    } 

    EloMask emask = new EloMask(maskenname, eigenschaften); 
    staticVariables.allMask.Add(emask); 

    // clearing the list is no longer needed     
} 
0

下面是一个例子,你如何能做到你想要什么:

public static List<Person> PersonsList = new List<Person>(); 
    public static Random rd = new Random(); 
    static void Main(string[] args) 
    { 

     for (int i = 0; i < 5; i++) 
     { 
      List<string> tmpAbilities = new List<string>() {((char)rd.Next(255)).ToString(), ((char)rd.Next(255)).ToString() , ((char)rd.Next(255)).ToString() }; 
      Person tmpPerson = new Person("TmpName_"+i,tmpAbilities); 
      PersonsList.Add(tmpPerson); 
     } 
     foreach (var persona in PersonsList) 
     { 
      Console.WriteLine(persona); 
     } 
    } 


    public class Person 
    { 

     public string Name { get; set; } 

     public List<string> Abilities; 

     public Person(string name,List<string> abilities) 
     { 
      Name = name; 
      Abilities = abilities; 
     } 

     public override string ToString() 
     { 
      string retVal = $"Name: {Name}\n"; 
      foreach (var ability in Abilities) 
      { 
       retVal += $"Ability : {ability}\n"; 
      } 
      return retVal; 
     } 
    } 
0
 for (int i = 0; i < 100; i++) 
     { 

      if (elo.ReadObjMask(i) > 0) 
      { 
       // Create a new listin here 
       eigenschaften = new List<string>(); 

       var iRet = elo.PrepareObjectEx(0, 0, i); 
       maskenname = elo.ObjMName(); 
       if (maskenname != "") 
       { 
        for (int e = 0; e < 50; e++) 
        { 
         string eigenschaft = elo.GetObjAttribName(e); 

         if (eigenschaft != "" && eigenschaft != "-") 
         { 
          eigenschaften.Add(eigenschaft); 
         } 
        } 
        allMasks.Add(maskenname); 

       } 

       else 
       { 
        // Do nothing 
       } 
       EloMask emask = new EloMask(maskenname, eigenschaften); 
       staticVariables.allMask.Add(emask); 
      } 
     } 
+0

谢谢特洛伊!您在这里缺少():eigenschaften =新列表; – saamii

+0

谢谢。匆匆太多;)只是更新了代码。 –

+0

没问题,我再次感谢你!我昨天挣扎了3个小时哈哈:D – saamii