在C#中更新类实例变量的问题

时间:2018-09-13 05:18:08

标签: c#

在下面的代码中,systemUsers是绑定列表,而usernamesfirstNameslastNames是数组。

我正在尝试通过循环将新用户添加到绑定列表systemUsers中。添加它们之后,我然后尝试更新其实例变量,例如名字和姓氏。

但是,当我这样做时,它们不会改变-它们的值为null。为什么会这样?

public static void CreateUsers() 
{
    // loop over the num. of users
    for (int i = 0; i < numberOfUsers; i++)
    {
        // create new user
        systemUsers.Add(new User(usernames[i]));

        // get class instance
        currentUser = systemUsers[i];

       // set class properties
        currentUser.FirstName = firstNames[i];
        currentUser.LastName = lastNames[i];
    }
}

User()是一个构造函数,它采用参数'username',即User(string username)

3 个答案:

答案 0 :(得分:1)

尝试下面的代码。您需要在循环中设置currentUser变量,然后设置其FirstName和LastName属性。现在,您没有在代码中的任何地方设置currentUser。在不声明变量并将其设置为某个值的情况下使用变量是不正确的。

此外,请确保firstNameslastNames的数组已正确填充且不包含空值。例如,如果用户数为2个或更多,则firstNames[1]不应为null。

public static void CreateUsers() 
{
    //make sure currentUser variable is declared outside the loop
    //or inside the loop at start of the loop body 
    User currentUser = null;

   //make sure your systemUsers binding list is not null
    if(systemUsers == null) {
        systemUsers = new BindingList<User>();
    }

    // loop over the num. of users
    for (int i = 0; i < numberOfUsers; i++)
    {
        // create new user
        currentUser = new User(usernames[i]);
        currentUser.FirstName = firstNames[i];
        currentUser.LastName = lastNames[i];

       //add the User object to your list
        systemUsers.Add(currentUser);

    }
}

答案 1 :(得分:1)

您可以在实例化User类的同时设置这些属性的值。无论currentUser引用什么,它都是不是您在示例中实例化的User类。

public static void CreateUsers() 
{
    for (int i = 0; i < numberOfUsers; i++)
    {
        systemUsers.Add(new User(usernames[i]) { FirstName = firstNames[i], LastName = lastNames[i] });
    }
}

答案 2 :(得分:0)

将使用Select之类的AddRange或直接初始化:

systemUsers = Enumerable.Range(0, numberOfUsers)
                        .Select(i => new User { 
                            FirstName = firstNames[i],
                            // others properties
                        })
                        .ToList()