【发布时间】:2014-04-15 17:23:46
【问题描述】:
我想知道 Where() 和 ToList() 方法到底在做什么。具体来说,我想知道Where() 是否会在内存中创建一个新对象或返回一个新对象。
好的,看下面的代码,说我有一个骨架日志类。
public class Log()
{
public string Log {get;set;}
public string CreatedByUserId {get;set;}
public string ModifiedUserId {get;set;}
}
在我的业务逻辑中,假设我只希望某个用户创建或修改日志。这将通过一个方法来完成:FilterLogsAccordingToUserId()。
public IEnumerable<Log> FilterLogsAccordingToUserId(IEnumerable<Log> logs, string userId)
{
int user = int.Parse(userId);
return logs.Where(x => x.CreatedByUserId.Equals(user) ||
x.ModifiedByUserId.Equals(user)).ToList();
}
在这种情况下,Where() 是通过删除所有不符合条件的对象来修改IEnumerable<Log>,还是抓取所有对象,将该对象强制转换为内存中的列表,然后返回该新对象?
如果是第二种可能性,如果将足够大的日志列表传递给函数,我担心性能是否正确?
【问题讨论】:
-
"会在内存中创建一个新对象还是返回一个新对象",有什么区别?
-
您是否阅读过相关方法的文档?见
Enumerable.Where和Enumerable.ToList。 -
您应该使用 Object.ReferenceEquals 对您的两个列表中的项目进行测试。
-
@LasseV.Karlsen 我可能通过在此处添加“或”误解了提问者的意图。我的错。