2013-03-05 4 views
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 
    } 
} 

Но это дает ошибку, что она находится за пределами границы массива.Добавить строки в строковый массив

Что может быть самым удобным способом выполнения этого действия?

+0

Причина ошибки массива вне границ заключается в том, что вы используете длину имени пользователя в качестве индекса в вашем массиве user_Name. На самом деле это не вопрос мяча, но я думал, что вы должны знать. – Odrade

ответ

7

Не используйте массивы, если вам требуется хранилище с переменным размером.

Использовать List<string> вместо этого - это позволяет вам Add элементов.


В вашем случае ваш выбор из двух массивов сомнительный, так как каждый пользователь имеет соответствующий пароль - всегда. Это говорит о том, что у вас должен быть собственный класс для хранения пары пользователь/пароль.

С таким классом (скажем User) вы бы провели List<User> и упростили свой код.

+2

Нет; используйте «Список ' – SLaks

+0

@SLaks - Хорошая точка. – Oded

+0

thanx .. я буду хранить тикс в виду –

2

Попробуйте использовать 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); 
    } 
} 

Вот рефакторинга версия:

Пользователи содержатся в пользовательском классе.

Это IEquatable<>, который сравнивает их имя пользователя/пароль (вы можете рассмотреть возможность поиска в Guid, чтобы они были уникальными).

Легко добавлять/удалять пользователей.

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)); 
    } 
} 
+0

Это быстро выйдет из-под контроля. Я всегда рекомендую, чтобы новички справились с концепциями ООП как можно скорее. –

+0

o great bro ... thix ix также лучший способ –

+0

@ RummyKhan проверить мое редактирование – Romoku

0

Хорошо, я думаю, вы можете подумать об этом неправильно. Способ использования массивов - это крик для объекта.

Я бы сделал пользователь объект как так

public class User 
{ 
    public string UserName { get; set;} 
    public string Password { get; set;} 
} 

Я бы тогда вести список пользователей вместо этого. Таким образом вам не нужно будет поддерживать индексы массивов, и вы можете легко добавить новых пользователей в список.

0

Почему вы не используете и List и применяете DTO вместо кратных string[]?

Попробуйте что-то вроде этого:

1) Создайте DTO для пользователей:

public class UserDTO 
{ 
    public string UserName { get; set; } 
    public string Password { get; set; }  
} 

2) Использование и 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 }); 
    } 
} 
+0

отлично, и спасибо за то, что показал мне путь –

0

Использование Try List<string> класс вместо string[]

и добавлять элементы в массив с использованием object.Add() метод

+0

okay i will попробуйте это thanx для ваших комментариев –

Смежные вопросы