自己的类对象属性被覆盖

时间:2016-11-30 08:40:01

标签: c#

我创建了一个属性为String的对象,另一个是<Window.Resources> <Style BasedOn="{StaticResource MetroTabItem}" TargetType="{x:Type Controls:MetroTabItem}"> <Setter Property="Controls:ControlsHelper.HeaderFontSize" Value="15"/> <Setter Property="Foreground" Value="Red"/> <Setter Property="CloseButtonEnabled" Value="True"/> </Style> </Window.Resources> <Controls:MetroTabControl ItemsSource="{Binding AvailableFiles}" SelectedIndex="{Binding SelectedIndex}" Grid.Row="1" > <Controls:MetroTabControl.ItemTemplate > <DataTemplate> <TextBlock Text="{Binding Title}" /> </DataTemplate> </Controls:MetroTabControl.ItemTemplate> </Controls:MetroTabControl> 。 我还创建了一个List<String>,然后我添加了所有的对象。 现在我的问题是第二个属性被覆盖了。

例如我有3个对象:

static List<MyObject>

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

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(); 
    }
}

3 个答案:

答案 0 :(得分:1)

Dispose始终指向同一个实例,因为您传递的是对列表的引用,而不是副本。因此,对于您将该列表传递到的每个 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); } } ,列表都会被清除并再次填充。

要解决您的问题,请改为创建新列表:

List<string>

答案 1 :(得分: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;
        }
    }

答案 2 :(得分:0)

IDisposable