我尝试使用此示例简化我的问题:
List<User> userList = new List<User>()
{
new User {IdUser = 1, Login = "Frank" },
new User {IdUser = 2, Login = "Pat" },
new User {IdUser = 3, Login = "Max" },
new User {IdUser = 4, Login = "Paul" },
new User {IdUser = 5, Login = "John" }
};
User newUser = new User()
{
IdUser = 3,
Login = "Chris"
};
var userToUpdate = userList.FirstOrDefault(r => r.IdUser == 3);
userToUpdate = newUser;
Run Code Online (Sandbox Code Playgroud)
为什么userList不包含Login = "Chris"该程序结束时的值?如何更新列表中的项目?
PS1:我不想更新Login值,我想更新用户对象
PS2:它在此链接中说FirstOrDefault选择集合中的项目,但不"分离"或"克隆"它.即它是同一个实例.因此,如果修改属性,则修改原始实例.
我很迷惑!
这样做:
var userToUpdate = userList.FirstOrDefault(r => r.IdUser == 3);
Run Code Online (Sandbox Code Playgroud)
您获得指向所需用户的参考副本.因此,有两个不同的引用指向此用户:userToUpdate和内部引用userList.
当您分配newUser给userToUpdate您时,列表中的一个引用仍然指向旧用户,并且您将获得userToUpdate指向的引用newUser.
要更新用户,您应该执行以下操作:
var index = userList.FindIndex(r => r.IdUser == 3);
if (index != -1)
{
userList[index].Id = newUser.Id,
//set all other properties from newUser
}
Run Code Online (Sandbox Code Playgroud)
要么
更简单的方法:
var index = userList.FindIndex(r => r.IdUser == 3);
if (index != -1)
{
userList[index] = newUser;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |