繁体   English   中英

c#如何从另一个类调用列表

[英]c# How to call a List from another Class

我对 c# 有点陌生,正在尝试制作电话簿控制台应用程序。 需要一些帮助来弄清楚如何从另一个类调用列表。 要理解我的代码:我有一个包含列表的类 (ContactsList)。 然后我有另一个类(AppOptions),它有一些用户可以选择的选项,一个是 ViewAllContacts。 所以我需要知道我需要在 ViewAllContacts 方法中编写什么代码,以及是否需要在其他任何地方进行任何其他更改。

public class ContactsList
    {
        public string contactName { get; set; }
        public int contactNumber { get; set; }

        public void listMethod()
        {
            List<ContactsList> contacts = new List<ContactsList>();
            {
                contacts.Add(new ContactsList { contactName = "John", contactNumber = 01 });
                contacts.Add(new ContactsList { contactName = "Jack", contactNumber = 02 });
                contacts.Add(new ContactsList { contactName = "Jay", contactNumber = 03 });
            }
        }
    }

 class AppOptions
    {
        ContactsList contactList = new ContactsList();
        public void viewAllContacts()
        {
           
        }
    }

对我的代码的任何额外改进将不胜感激。 谢谢!

编辑:我想要的另一件重要的事情是使用 ViewAllContacts 方法遍历列表

你应该试试下面的代码。

public class ContactsList
    {
        public string contactName { get; set; }
        public int contactNumber { get; set; }

        public IList<ContactsList> listMethod()
        {
            List<ContactsList> contacts = new List<ContactsList>();
            {
                contacts.Add(new ContactsList { contactName = "John", contactNumber = 01 });
                contacts.Add(new ContactsList { contactName = "Jack", contactNumber = 02 });
                contacts.Add(new ContactsList { contactName = "Jay", contactNumber = 03 });
            }

            return contacts;
        }
    }

    class AppOptions
    {
        ContactsList contactList = new ContactsList();
        public void viewAllContacts()
        {
            var lst = contactList.listMethod();
        }
    }
  • Contact是单个联系人(姓名和号码)
  • Contacts集合Contacts

他们来了:

 public class Contact {
   public Contact(string name, string number) {
     if (null == name)
       throw new ArgumentNullException(nameof(name));
     if (null == number) 
       throw new ArgumentNullException(nameof(number));

     //TODO: Add more validation here

     Name = name;
     Number = number;   
   }

   public string Name {get;}
   // Let it be of type string: we can have numbers like "+1(555)123-45-67" 
   public string Number {get;}

   public override string ToString() => $"{Name} {Number}";

   public bool Equals(Contact other) {
     if (ReferenceEquals(this, other))
       return true;
     if (null == other)
       return false;

     return string.Equals(Name, other.Name, StringComparison.OrdinalIgnoreCase) &&
            string.Equals(Number, other.Number, StringComparison.OrdinalIgnoreCase);
   }

   public override bool Equals(object obj) => obj is Contact other && Equals(other);

   public override int GetHashCode() => 
     Number?.GetHashCode(StringComparison.OrdinalIgnoreCase) ?? 0;
 }

集合可以是(如果你喜欢List<T>

public class Contacts : IList<Contact> {
  private List<Contact> m_Items = new List<Contact>();

  public Contact this[int index] { 
    get => m_Items[index]; 
    set {
      if (null == value)
        RemoveAt(index);
      else
        m_Items[index] = value;
    } 
  }

  public void Add(Contact item) {
    if (null == item)
      throw new ArgumentNullException(nameof(item));

      m_Items.Add(item);
  }

  public void Insert(int index, Contact item) {
    if (null == item)
      throw new ArgumentNullException(nameof(item));

    m_Items.Insert(index, item);
  }

  public int Count => m_Items.Count;
  public bool IsReadOnly => false;
  public void Clear() => m_Items.Clear();
  public bool Contains(Contact item) => m_Items.Contains(item);
  public void CopyTo(Contact[] array, int arrayIndex) => m_Items.CopyTo(array, arrayIndex);
  public IEnumerator<Contact> GetEnumerator() => m_Items.GetEnumerator();
  public int IndexOf(Contact item) => m_Items.IndexOf(item);
  public bool Remove(Contact item) => m_Items.Remove(item);
  public void RemoveAt(int index) => m_Items.RemoveAt(index);
  IEnumerator IEnumerable.GetEnumerator() => m_Items.GetEnumerator();
}

然后你可以轻松使用它

private Contacts myContacts = new Contacts() {
  new Contact("John", "01"),
  new Contact("Jack", "02"),
  new Contact("Jay", "03"), 
};

...

public void viewAllContacts() {
  foreach (var contact in myContacts)
    Console.WriteLine(contact);           
}

你有基本的问题我建议你先学基本的

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types

您可以创建 IList listMethod 并在课堂上使用它

首先,这不是像这样声明类的好编程方法,您可以创建具有属性 contactName 和 contactNumber 的类,然后创建另一个具有 listMethod 的类。 您应该使用此类来获取数据。

无论如何,在这种情况下,您只需要更改 listMethod 的返回类型,它现在是无效的,因此不返回任何内容,您还可以使用 foreach 循环遍历联系人。

public class ContactsList
    {
        public string contactName { get; set; }
        public int contactNumber { get; set; }

        public List<ContactsList> listMethod()
        {
            List<ContactsList> contacts = new List<ContactsList>();
            {
                contacts.Add(new ContactsList { contactName = "John", contactNumber = 01 });
                contacts.Add(new ContactsList { contactName = "Jack", contactNumber = 02 });
                contacts.Add(new ContactsList { contactName = "Jay", contactNumber = 03 });
            }
        }
    }

 class AppOptions
    {
        ContactsList contactList = new ContactsList();
        public void viewAllContacts()
        {
           var contacts = contactList.listMethod();
           foreach(var item in contacts)
           {
               Console.WriteLine(item.contactName);
               Console.WriteLine(item.contactNumber);
           }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM