class Myclass
{
static string[] user_Name = { "admin", "user1", "user2" };
static string[] user_Password ={ "admin", "123", "789" };
public static void Check_Method(string u_name, string u_password)
{
for (int i = 0; i < user_Name.Length; i++)
{
if (u_name == user_Name[i] && u_password == user_Password[i])
{
MessageBox.Show("login successful");
break;
}
else
{
if (i == (user_Name.Length - 1))
MessageBox.Show("Badshow");
}
}
}
public static void add_user(string name, string password)
{
i=user_Name.Length;
user_Name[i]=name;
user_Password[i]=password;
//here i want to add another user but im unable to find the way
}
}
But it gives an error that it is outside the boundary of an array.
What could be the most convenient way to perform this action?
-
The reason for the array out of bounds error is that you are using the length of the user name as the index into your user_Name array. This isn't really the meat of the question but I thought you should know.Odrade– Odrade2013年03月05日 20:11:23 +00:00Commented Mar 5, 2013 at 20:11
5 Answers 5
Don't use arrays if you need variable sized storage.
Use List<string> instead - it allows you to Add items.
In your case, your choice of two arrays is questionable, as each user has a corresponding password - always. This suggests that you should have a custom class to hold a user/password pair.
With such a class (say User), you would hold a List<User> and simplify your code.
Comments
Try using a List<>.
class Myclass
{
static List<string> user_Name = new List<string>{ "admin", "user1", "user2" };
static List<string> user_Password = new List<string>{ "admin", "123", "789" };
public static void Check_Method(string u_name, string u_password)
{
for (int i = 0; i < user_Name.Length; i++)
{
if (u_name == user_Name[i] && u_password == user_Password[i])
{
MessageBox.Show("login successful");
break;
}
else
{
if (i == (user_Name.Length - 1))
MessageBox.Show("Badshow");
}
}
}
public static void add_user(string name, string password)
{
user_Name.Add(name);
user_Password.Add(password);
}
}
Here's a refactored version:
Users are contained in a user class.
They are IEquatable<> which compares their username/passwords (you might want to consider looking into a Guid to keep them unique).
Easily add/remove users.
public class User : IEquatable<User>
{
public User(string name, string password)
{
Name = name;
Password = password;
}
public string Name { get; set; }
public string Password { get; set; }
public bool Equals(User other)
{
if (other == null) return false;
return other.Name == Name && other.Password == Password;
}
}
public class AuthenticationManager
{
private List<User> LoggedInUsers = new List<User>
{ new User("Admin", "admin"), new User ("user1", "123"), new User ("user2", "789") };
public bool Authenticate(string userName, string password)
{
var user = new User(userName, password);
//if the user is in the list it will return false otherwise true.
return !LoggedInUsers.Any(u => user.Equals(user));
}
public void Login(string name, string password)
{
LoggedInUsers.Add(new User(name, password));
}
public void Logout(string name, string password)
{
LoggedInUsers.Remove(new User(name, password));
}
}
2 Comments
Okay I think you might be thinking about this the wrong way. The way in which you're using arrays is screaming out for an object.
I would made User an object like so
public class User
{
public string UserName { get; set;}
public string Password { get; set;}
}
I would then maintain a list of Users instead. That way you won't need to maintain array indexes and you can easily add new users into the list.
Comments
Why don't you use and List and apply a DTO instead of multiples string[] ?
Try something like this:
1) Create a DTO for your Users:
public class UserDTO
{
public string UserName { get; set; }
public string Password { get; set; }
}
2) Use and List<DTO>
class Myclass
{
static List<UserDTO> users = new List<UserDTO>()
{
new UserDTO() { UserName= "admin", Password = "admin" } ,
new UserDTO() { UserName= "user1", Password = "123" } ,
new UserDTO() { UserName= "user2", Password = "789" } ,
}
public static void Check_Method(string u_name, string u_password)
{
if (users.Exists(x => x.UserName == u_name && x.Password == u_password)
{
MessageBox.Show("login successful");
}
else
{
MessageBox.Show("Badshow");
}
}
public static void add_user(string name, string password)
{
users.Add(new UserDTO() { UserName= name, Password = password });
}
}
Comments
Try use List<string> class instead of string[]
and add items to array using object.Add() method