我创建了一个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");
}
很抱歉,如果对于那里的任何人来说这似乎是一个密集的问题,那么仍然是一个初学者试图学习!
答案 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)用户是否存在。