3
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?

1
  • 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. Commented Mar 5, 2013 at 20:11

5 Answers 5

7

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.

Sign up to request clarification or add additional context in comments.

Comments

2

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

This would get out of hand pretty quickly. I'd always recommend that newcomers get to grips with OOP concepts ASAP.
o great bro... thix ix also a better way
0

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

0

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

0

Try use List<string> class instead of string[]

and add items to array using object.Add() method

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.