如何从对象列表中访问变量?

时间:2017-11-10 18:43:03

标签: c#

我创建了一个User类,它包含如下所示的简单变量:

    public class User
    {
            public string username; //Unique usernames
            public string password;
    }

然后我实例化另一个类中的对象列表:

    List<User> user = new List<User>();

    user.Add(new User {username = "admin", password = "123"});

如何通过使用foreach循环搜索用户名来检索密码的值?我可能只是感到困惑,但这就是我想出来的:

    foreach(var item in user)
    {
            if(item.Equals(username_input))
            {
                //I try to store the password into a string pass_check
                pass_check = item.password;
            }
    }

    if (user_input.Equals(pass_check))
    {
            Console.WriteLine("Login successful");
    }

很抱歉,如果对于那里的任何人来说这似乎是一个密集的问题,那么仍然是一个初学者试图学习!

2 个答案:

答案 0 :(得分:0)

你非常接近..

if(item.username.Equals(username_input))

在这种情况下,您需要检查项目的属性username

你甚至可以将它缩短为:

foreach(var item in user)
{
  if(item.username.Equals(username_input)
    && user_input.Equals(item.password))
  {
    Console.WriteLine("Login successful");
    break; // no need to check more.. or is there?
  }               
}

你可以使用Linq获得真正的幻想:

if (user.Any(i => i.username.Equals(username_input)
  && user_input.Equals(i.password))
{
  Console.WriteLine("Login successful");
}

正如juharr在推荐中指出的那样,从类/对象公开值的最佳实践是使用属性而不是字段..

public class User
{
  // not best practices
  public string username; 

  // best practices
  public string password { get; set; }
}

答案 1 :(得分:0)

甚至发烧友:

using System.Linq;

public static class Extensions
{
    // Extension method that works on List<User> to validate user && PW
    // - returns true if user exists and pw is ok, else false
    public static bool CheckUserPassword(this List<User> users, string user_name, string pw)
    {
        // add null checks for users, user_name and pw if you are paranoid of know your customers ;o)
        return users.Any(u => u.username == user_name && u.password == pw);
    }
}

public class User
{
    public string password;
    public string username; //Unique usernames
}

internal class Program
{
    private static List<User> users = new List<User> { new User { username = "admin", password = "123" } };

    static void Main(string[] args)
    {
        // use extension method like this:
        var isValid = users.CheckUserPassword("Hello","Jeha");

        Console.WriteLine($"user 'admin' with pw '8888' => {users.CheckUserPassword("admin", "8888")}");
        Console.WriteLine($"user 'admin' with pw '123' => {users.CheckUserPassword("admin", "123")}");
        Console.ReadLine();
    }
}

扩展方法可以在this - 部分执行 - 在这种情况下仅在List<User>上执行。 Extensionmethod使用Linq查找此名称和pw的Any(至少1)用户是否存在。