向字符串数组中添加字符串

本文关键字:字符串 添加 数组 | 更新日期: 2023-09-27 18:02:17

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
    }
}

但是它会给出一个错误,认为它在数组的边界之外。

执行此操作最方便的方法是什么?

向字符串数组中添加字符串

如果需要可变大小的存储空间,请不要使用数组。

使用List<string>代替-它允许您Add项。


在您的示例中,选择两个数组是有问题的,因为每个用户都有一个相应的密码——总是如此。这建议您应该有一个自定义类来保存用户/密码对。

有了这样一个类(比如User),您将持有List<User>并简化代码。

尝试使用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));
    }
}

好吧,我想你可能想错了。你使用数组的方式是大声呼喊一个对象。

我将User创建为如下的对象

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

我将维护一个用户列表。这样,您就不需要维护数组索引,并且可以轻松地将新用户添加到列表中。

为什么不使用和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 });
    }
}

尝试使用List<string>类代替string[]

并使用object.Add()方法

向数组添加项