在循环中更新现有用户对象

本文关键字:用户 对象 更新 循环 | 更新日期: 2023-09-27 18:36:01

不确定我是否以正确的方式执行此操作,但想根据用户列表中是否包含在另一个列表中来更新用户列表中包含的用户对象的某些属性。

这就是我尝试过的。

foreach (var v in usersAssessment)
{
    if (users.Select(t => t.Id).Contains(v.Id))
    {
        var user = users.Where(p => p.Id == v.Id).FirstOrDefault();
        switch (v.ModuleCode)
        {
            case "M01":
                user.M01 = v.ScoreObtained;
                break;
        }
        //this is where I am trying to update the user but to no avail
        users.Where(p => p.Id == v.Id).FirstOrDefault() = user;
    }
}

如何更新属性值?

亲切问候

在循环中更新现有用户对象

如果usersIEnumerable<>或引用类型(任何类),则无需更新它。你已经做到了。

foreach (var v in usersAssessment)
{
    var user = users.FirstOrDefault(p => p.Id == v.Id);
    if(user != null)
    {
        switch (v.ModuleCode)
        {
            case "M01":
                // This WILL update the selected user, if users is a collection of reference types.
                user.M01 = v.ScoreObtained;
                break;
        }
    }
}

在代码中,当您运行此行时:

var user = users.Where(p => p.Id == v.Id).FirstOrDefault();

您已获得对列表中user对象的可变引用。因此,当您执行时

user.M01 = v.ScoreObtained;

您已经更新了用户,无需将其存储回列表中。

事实上,这条线

users.Where(p => p.Id == v.Id).FirstOrDefault() = user;

语法不正确 - =左侧的项必须是单个命名变量引用 - 尝试像这样更改方法的返回值不会执行任何操作,因为方法不会像那样反向工作。