不确定如何在类

时间:2015-11-14 15:38:14

标签: c# list class

我目前正在尝试将用户添加到控制台应用程序中的列表中。一旦用户输入了我想要运行方法的所有人的名字" GetUsers()"显示列表中所有用户的名称。我不确定如何做到这一点,但我已经在下面的代码中给出了它。我会很感激我在哪里出错,以及如何解决这个问题。

我知道如何在主程序中执行此操作,但是想知道是否有更简洁的方法可以使用类来执行此操作。

主要

static void Main(string[] args)
    {
        List<User> users = new List<User>();

        string addAnother = "y";
        while (addAnother == "y")
        {
            Console.WriteLine("Please enter a name: ");
            string userName = Console.ReadLine();
            User user = new User(userName, userAge, userAddress, userPhone);
            users.Add(user);
        }

        Console.ReadKey();

    }

用户类

class User
{


    private string _name;



    public User(string name)
    {
        _name = name;
    }



    public string GetName()
    {
        return _name;
    }

    public void SetName(string name)
    {
        _name = name;
    }



    public static void GetUsers()
    {
        foreach (User u in users)
        {
            //Display users
        }
    }
} 

3 个答案:

答案 0 :(得分:0)

将GetUsers()方法移动到主程序类中,并删除静态关键字。

答案 1 :(得分:0)

如果您需要GetUsers()类中的User方法,则必须使用静态AddUser()方法在同一个类中创建静态用户列表,如下所示:< / p>

class User
{
    private static List<User> users;

    private string _name;

    public User(string name)
    {
        _name = name;
    }


    public string GetName()
    {
        return _name;
    }

    public void SetName(string name)
    {
        _name = name;
    }

    public static void AddUser(User u)
    {
        if (users == null)
            users = new List<User>();

        users.Add(u);
    }

    public static void GetUsers()
    {
        foreach (User u in users)
        {
            //Display users
        }
    }
}

添加用户:

Console.WriteLine("Please enter a name: ");
string userName = Console.ReadLine();

User user = new User(userName);
User.AddUser(user);

显示所有用户:

User.GetUsers();

声明为 static 的任何内容都不与任何对象相关联,而是与类本身相关联。因此,当您拨打AddUser()GetUsers()时,您正在User班级中呼叫他们,不是您创建的用户对象。

答案 2 :(得分:0)

您并非真的需要在GetUsers课程中实施User。它不好(按设计),因为每个用户都应该自己保存信息而不是其他用户。

您可以创建另一个名为UserList的类来实现您想要的目标。

class Program
{
    static void Main()
    {
        UserList userList = new UserList();

        string addAnother = "y";
        while (addAnother == "y" || addAnother == "Y")
        {
            Console.WriteLine("Please enter a name: ");
            User user = new User(Console.ReadLine());
            userList.Add(user);
            Console.WriteLine("Do you want to add another user? (y)");
            addAnother = Console.ReadLine();
        }

        userList.GetUsers();

        Console.ReadKey();

    }
}

请注意,您可以使用“属性”而不是GetNameSetName方法。虽然属性将编译为方法,但在属性上使用方法并不常见。

您还可以覆盖对象类的ToString方法。因此,当您想将User转换为字符串以显示它时,将使用此覆盖方法。

class User
{
    private string _name;

    public User(string name)
    {
        _name = name;
    }

    public string Name // this is the property
    {
        get { return _name; }  //  GetName
        set { _name = value; } //  SetName
    }

    public override string ToString() // this is called when you do user.ToString()
    {
        return string.Format("Name : {0}", Name); // return needed information.
    }
}

这是UserList类,它应该包含所有用户。所以你需要List<User>的属性,你可以在里面实现GetUsers方法。

class UserList
{
    private List<User> _users;

    public UserList()
    {
        _users = new List<User>();
    }

    public void Add(User user)
    {
        Users.Add(user);
    }

    public void GetUsers()
    {
        foreach (var user in Users)
        {
            Console.WriteLine(user.ToString());
        }
    }

    public List<User> Users
    {
        get { return _users; }
    }
}