c# Как сохранить несколько значений в конструкторе класса Array? - PullRequest
1 голос
/ 09 мая 2020

Я создаю консольное приложение, используя класс Array, у которого есть имя пользователя в качестве объекта, это member.cs

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

  }

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

И это мой 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;
    }
}

, но каждый раз вызываются функции Adduser (), он сохраняет только один член и продолжает обновляться до нового члена, здесь я ожидаю, что у меня будет не более 100 имен пользователей.

Как мне хранить несколько значений в конструкторе или Объект массива?

Следует ли мне создать новый массив в классе-члене для хранения нескольких элементов?

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

Ответы [ 4 ]

3 голосов
/ 09 мая 2020

это потому, что вы каждый раз обновляете массив. Это может помочь.

    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");

          }
        }

также я думаю, что лучше использовать список вместо массива

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

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


  }
1 голос
/ 09 мая 2020

Так как массив уже создан из 100 элементов, мы не можем проверить длину массива, чтобы проверить, существуют ли элементы или нет. Array.length всегда будет давать максимальную длину массива, поскольку память выделена для 100 элементов. Но вы можете проверить, существует ли последний элемент или нет, а затем добавить новый элемент. Ниже приведен фрагмент кода, который может вам помочь:

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

Ниже приведен код для тестирования функциональности:

 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();
    }
1 голос
/ 09 мая 2020

Используйте индексную переменную и обновляйте ее каждый раз, когда добавляете элемент.

  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++;   
 }

}

1 голос
/ 09 мая 2020

Вместо массива следует использовать объект List.

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));
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...