我目前正在尝试将用户添加到控制台应用程序中的列表中。一旦用户输入了我想要运行方法的所有人的名字" 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
}
}
}
答案 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();
}
}
请注意,您可以使用“属性”而不是GetName
和SetName
方法。虽然属性将编译为方法,但在属性上使用方法并不常见。
您还可以覆盖对象类的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; }
}
}