【问题标题】:How can I make a List(main) of Lists of Objects correctly so that when an item is added to a list, it is not added to all the lists in the List(main)?如何正确创建对象列表的列表(主),以便在将项目添加到列表时,它不会添加到列表(主)中的所有列表中?
【发布时间】:2021-07-26 12:43:28
【问题描述】:

我有这个:

public sealed class RepositoryContacts
{
     public List<List<Template>> Contacts = new List<List<Template>>();

     public List<Template> PersonalContacts = new List<Template>();
     public static RepositoryContactacts Instancia = new RepositoryContactacts();
     private RepositoryContacts() { }
}

假设我在联系人中添加了两个列表,如下所示:

PlantillaContactos contact = new PlantillaContactos 
{
    Name= "",
    LastName= "",
    Address= "",
};
RepositoryContacts.Instancia.PersonalContacts.Add(contact);
            
RepositoryContacts.Instancia.Contacts.Add(RepositoryContacts.Instancia.PersonalContacts);
RepositoryContacts.Instancia.PersonalContacts.Clear();
RepositoryContacts.Instancia.Contacts[RepositoryContacts.Instancia.Contacts.Count - 1].Clear();

到目前为止一切顺利,最后两行用于清理列表的内容,因为它是在联系人内部初始化的。现在,当我真的想将一个项目添加到列表中时,它们会添加到它内部的所有列表中。我就是这样做的:

public void Add(string name, string lastname, string address) 
{
    PlantillaContactos contacto = new PlantillaContactos 
    {
        Name= name,
        LastName= lastname,
        Address= address,
    };
    RepositoryContacts.Instancia.PersonalContacts.Add(contacto);
    RepositoryContacts.Instancia.Contactos[index] = RepositoryContacts.Instancia.PersonalContacts;
}

变量“index”的值,会根据你想要得到的列表而变化(我已经测试过了)。

注意:我将为您的下一个序列化创建所有这些。

【问题讨论】:

  • 问题读起来很奇怪;是作业/别人写的吗?
  • 我已经尽力修复了,已经翻译好了,但是如果你还是看不懂,请告诉我。
  • 我认为你应该清楚你的实施问题:(不清楚!

标签: c# list winforms serialization


【解决方案1】:

您使用了 Singleton 模式设计并将其更改为仅一个示例

RepositoryContacts 改为:

public sealed class RepositoryContacts
{
    public List<List<Template>> Contacts = new List<List<Template>>();
    public List<Template> PersonalContacts = new List<Template>();
    
    private static RepositoryContactacts instancia = null;
    private RepositoryContacts() { }
    public static RepositoryContactacts Instancia
    {
        get
        {
            if (instancia == null)
            {
               instancia = new RepositoryContactacts();
            }
            return instancia;
        }
    }
}

【讨论】:

  • 您能否详细说明为什么您认为您提出的解决方案可能会解决 OP 的问题?
猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多