不确定我是否以正确的方式进行此操作,但希望根据是否包含在另一个列表中来更新用户列表中包含的用户对象的某些属性。
这就是我的尝试。
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;
}
}
如何更新属性值?
亲切的问候
答案 0 :(得分:2)
如果users
是IEnumerable<>
或引用类型(任何类),则无需更新它。你已经做到了。
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;
}
}
}
答案 1 :(得分:1)
在您的代码中,当您运行此行时:
var user = users.Where(p => p.Id == v.Id).FirstOrDefault();
您已获得列表中user
对象的可变引用。因此,当你执行
user.M01 = v.ScoreObtained;
,
您已经更新了用户,无需将其存储回列表中。
实际上,行
users.Where(p => p.Id == v.Id).FirstOrDefault() = user;
在语法上是不正确的 - =
左边的项必须是一个命名的变量引用 - 试图改变这样的方法的返回值什么都不做,因为方法不能反向工作那样的。