【问题标题】:adding elements to list not working in c# and .net在 c# 和 .net 中将元素添加到列表中不起作用
【发布时间】:2021-02-23 09:11:16
【问题描述】:

我有一个清单:

private static List<Contact> List()
{
    var contacts = new List<Contact>() { new Contact("Bob",123) };
    return contacts;
}

还有一个将新联系人添加到列表中的方法:

private static void AddContact()
{
    var contact = new Contact("Max", 123);
    List().Add(contact);
}

static void Main(string[] args)
{
    AddContact();
    ShowAllContacts();
}

private static void ShowAllContacts()
{ 
    foreach(var contact in List())
    { 
        Console.WriteLine(contact.GetContactName() + ", "
          + contact.GetContactNumber());
    }
} 

但是当我尝试显示整个列表时,它只显示列表中实例化时的元素 (Bob,123),而不显示 Max,123

【问题讨论】:

  • 请提供 ShowAllContacts() 方法的代码
  • 需要定义一个全局变量来保存List()的值。
  • 除非您存储List() 的返回值,否则您只是创建一个新的List,然后立即将其丢弃。

标签: c# list element add


【解决方案1】:

AddContact() 被调用时,一个新的列表被创建为List() 被调用。然后将联系人添加到这个新列表中,并且不返回列表或将其存储在任何变量中。因此,其中包含“Max”联系人的已创建列表“丢失”,因为它不再可访问,并将被垃圾收集器删除。

然后在ShowAllContacts() 中,您再次调用List(),这会创建一个新列表,其中没有“Max”联系人,因为它尚未添加到此列表中,而是添加到@987654325 中创建的列表中@。

【讨论】:

    【解决方案2】:

    我有一个清单

    你所拥有的是一种方法,而不是一个列表。该方法返回一个列表。如果你调用它一次,你会得到一个列表,如果你再次调用它,你会得到另一个列表。

    但是当我尝试显示整个列表时

    没有完整列表。您调用该方法两次,因此您有 2 个列表。

    如果你只想有 1 个列表,你只需要调用一次方法,然后将结果记住在一个变量中。

    您的代码应如下所示:

    static void Main(string[] args)
    {
        var contacts = List();
        AddContact(contacts);
        ShowAllContacts(contacts);
    }
    
    private static List<Contact> List()
    {
        var contacts = new List<Contact>() { new Contact("Bob",123)};
        return contacts;
    }
    
    private static void AddContact(List<Contact> whichListToAddTo)
    {
        var contact = new Contact("Max", 123);
        whichListToAddTo.Add(contact);
    }
    
    private static void ShowAllContacts(List<Contact> whichListToShow) 
    { 
         foreach(var contact in whichListToShow) 
         { 
               Console.WriteLine(contact.GetContactName() + ", " + contact.GetContactNumber()); 
         } 
    }
    

    【讨论】:

      【解决方案3】:

      我创建了一个静态 List 变量,然后创建了一个初始化 List 的方法。我还修改了 AddContact 方法。

      static List<Contact> contacts;
             
          static void Main(string[] args)
          {
              initializeList();
              AddContact();
              ShowAllContacts();
              Console.ReadLine();
          }
      
          private static void initializeList() //Initialize the list with the first item
          {
               contacts = new List<Contact>() { new Contact("Bob", 123) };
          }
      
          private static List<Contact> List()
          {
              return contacts;
          }
      
          private static void AddContact() // Add new items to the existing contacts list
          {
              var contact = new Contact("Max", 123);
              contacts.Add(contact);
          }
      
          private static void ShowAllContacts()
          {
              foreach (var contact in List())
              {
                  Console.WriteLine(contact.GetContactName() + ", "
                    + contact.GetContactNumber());
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        相关资源
        最近更新 更多