如何从列表中返回对象作为值

问题描述 投票:0回答:3

我有一个属性List Users,我想获取具有指定ID的User,而无需获取对其的引用。在UserDAO中:

public User ReturnUser(int id)
{
    var q = this.Users.Where(x => x.Id == id);
    return q.ToList()[0];
}

在主要:

User newUser = ud.ReturnUser(0);

Console.WriteLine(newUser.Name);
newUser.Name = "john";
Console.WriteLine(ud.Users[0].Name);
c# list
3个回答
0
投票

我认为AsNoTracking()可能是您想要的方式。

public User ReturnUser(int id)
{
    return this.Users.AsNoTracking().FirstOrDefault(x => x.Id == id);
}

此链接提供有关AsNoTracking()的更多信息,但是以上内容可以实现您想要实现的目标。

What difference does .AsNoTracking() make?


0
投票

如果您的User对象仅包含原始属性,则可以添加此方法:

public User ShallowCopy(){
  return (User)this.MemberwiseClone();
}

然后执行此操作:

//note: no error handling if ID not found
public User ReturnUser(int id)
{
  return this.Users.Single(x => x.Id == id).ShallowCopy();

}

如果您的用户包含复杂的类型属性,如果您不希望这些属性仅作为引用,则必须实现深层复制。>

[The fine manual有足够的话要说和一些很好的例子


0
投票

首先,如果您只参加第一个比赛,请使用FirstOrDefault()而不是Where()。>

然后,您可以只返回结果的Clone:

© www.soinside.com 2019 - 2024. All rights reserved.