简体   繁体   中英

c# How to store multiple value in Array class constructor?

I am making console app using Array class that has username as object, this is member.cs

Class Member{
  public string username;
  public Member(){

  }

   public Member(string username){
    username = username;
   }
}

And this is my Collection.cs

Class Collection{

static Member[] members = new Member[100];

public void Adduser(){
    console.writeLine("username?");
    string user_input = console.ReadLine();
    members = new Member[]{
       new Member(user_input)
    };

  }
    public Member[] get() {
       return members;
    }
}

but every time the Adduser() functions is called, it only stores one member and keeps updating to a new member, in here I am expecting to have 100 usernames at most.

How should I store multiple values in side the constructor or Array object?

Should I create a new array in member class to store multiple-member?

Even after I implemented index, I get nullexception error in side foreach
        public void showMember()
        {

            var data = record.get();

            foreach (var value in data)
            {
                Console.WriteLine(value.Username);
                Console.WriteLine(value.Phonenum);
                Console.WriteLine(value.Password);
                Console.WriteLine(value.Borrowedmovie);
            }
        }

that's because you renew the array every time.this might help.

    int index=0;

        public void Adduser(){
            console.writeLine("username?");
            string user_input = console.ReadLine();
      if(index<members.Length)
       {
                members[index]=new Member(user_input)
                index++;
       }
       else console.writeLine("overflow");

          }
        }

also I think it's better if you use list instead of array

static List<Member> members = new List<Member>();

public void Adduser(){
    console.writeLine("username?");
    string user_input = console.ReadLine();
    members.Add(new Member(user_input));


  }

Instead of an array you should use an List object.

Class Collection{

static List<Member> members = new List<Member>();

public void Adduser(){
    console.writeLine("username?");
    string user_input = console.ReadLine();
    members.Add(new Member(user_input));
  }
}

Use index variable and update it everytime u add an item.

  Class Collection{

  static Member[] members = new Member[100];
  int index = 0;
  public void Adduser(){
     console.writeLine("username?");
     string user_input = console.ReadLine();
     members[index] = new Member(user_input);
     index++;   
 }

}

Since array is already instantiated with 100 elements, we can not check length of array to check whether elements exists or not. Array.length will always give the max length of array since the memory is allocated for 100 elements. But you can check whether last element exists or not and then you can add the new element. Below code snippet can help you:

class Member
{
    public string _username;
    public Member()
    {

    }

    public Member(string username)
    {
        _username = username;
    }
}

class Collection
{
    private Member[] members = new Member[100];

   private int index = 0;

    public void Adduser()
    {
        Console.WriteLine("username?");
        string user_input = Console.ReadLine();

        var lastElement = members[members.Length - 1];

        if (lastElement != null)
        {
            Console.WriteLine("members array is already full");
            return;
        }

        members[index] = new Member(user_input);
        index++;
    }

    public void DisplayMembers()
    {
        foreach (var item in members)
        {
            if (item != null)
            {
                Console.WriteLine("UserName {0}", item._username);
            }              
        }
    }
}

Following is a code for testing the functionality:

 static void Main(string[] args)
    {           
        Collection collection = new Collection();

        collection.Adduser();
        collection.Adduser();
        collection.Adduser();
        collection.Adduser();
        collection.Adduser();
        collection.Adduser();
        collection.DisplayMembers();

        Console.WriteLine("Start second collection");
        Collection collection2 = new Collection();
        collection2.Adduser();
        collection2.Adduser();
        collection2.Adduser();
        collection2.Adduser();
        collection2.Adduser();

        collection2.DisplayMembers();
        Console.ReadLine();
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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