Не могу описать метод добавления в список

Есть код, в котором мне необходимо реализовать работу интерфейса,

public interface IUsersStorage
    {
        List<User> GetAll();

        User TryGetById(int id);
        void Add(User user);
    }

и вот что должно получаться при выводе на консоль

 IUsersStorage usersStorage = new UsersInMemoryStorage();
 List<User> users = usersStorage.GetAll();

 usersStorage.Add(new User { Id = 1, Name = "Ivan", Age = 25 });
 usersStorage.Add(new User { Id = 2, Name = "NeIvan", Age = 2 });
 Console.WriteLine(users.Count == 2); // True

Так как мне реализовать метод Add, чтобы все работало? Я, честно признаюсь, третий день пытаюсь решить это. С условием что в Main() ничего менять нельзя.

Класс UsersInMemoryStorage

public class UsersInMemoryStorage : IUsersStorage
    {
        private static List<User> _users = new List<User>();

        public void Add(User user)
        {
            
        }

        public List<User> GetAll()
        {
            List<User> vs = new List<User>();
            foreach (User item in _users)
            {
                vs.Add(item);
            }
            return vs;
        }

        public User TryGetById(int id)
        {
            foreach (var item in _users)
            {
                if (item.Id == id)
                {
                    return item;
                }
            }
            return null;
        }
    }


Ответы (2 шт):

Автор решения: User12351259599491

//Создаем хранилище.
 IUsersStorage usersStorage = new UsersInMemoryStorage();
                
//Добавляем в хранилище юзеров

 usersStorage.Add(new User { Id = 1, Name = "Ivan", Age = 25 });
 usersStorage.Add(new User { Id = 2, Name = "NeIvan", Age = 2 });
//Затем берем всех юзеров.
 List<User> users = usersStorage.GetAll();
 Console.WriteLine(users.Count == 2); // True

Проблема в том что в Main ошибка List users = usersStorage.GetAll();
Юзеры берутся раньше чем добавляются, так что всегда будет False

            public void Add(User user)
            {
                _users.Add(user);

            }

→ Ссылка
Автор решения: Pavel Mayorov

Поскольку по условию должен измениться уже возвращённый список - вам нельзя делать копию списка, вы должны вернуть внутренний список или обёртку над ним.

Поскольку вы возвращаете именно List<User>, а не какой-нибудь интерфейс - вы не можете возвращать обёртку.

Таким образом, для решения задачи нужно написать вот так:

public List<User> GetAll()
{
    return _users;
}


А теперь важное замечание: никогда так не делайте. Вам нужно поменять Main.

Или откажитесь от требования мутации уже возвращённого списка:

 IUsersStorage usersStorage = new UsersInMemoryStorage();
 List<User> usersBefore = usersStorage.GetAll();

 usersStorage.Add(new User { Id = 1, Name = "Ivan", Age = 25 });
 usersStorage.Add(new User { Id = 2, Name = "NeIvan", Age = 2 });
 List<User> usersAfter = usersStorage.GetAll();

 Console.WriteLine($"before {usersBefore.Count}, after {usersAfter.Count}"); // before 0, after 2

Или же используйте read-only интерфейсы:

public interface IUsersStorage
{
    IReadOnlyCollection<User> GetAll();

    User TryGetById(int id);
    void Add(User user);
}

→ Ссылка