C# 是否使用扩展方法ToList<;T>;()浪费资源?

C# 是否使用扩展方法ToList<;T>;()浪费资源?,c#,generics,tolist,C#,Generics,Tolist,我有一个关于LINQ、IEnumerable和List的问题 当我有一个列表并想对其进行过滤或搜索时,我使用LINQ如下: var psec = from p in MyListOfSomeObjects where ((p.Tipo == tipo) || (p.Tipo == null)) select p; 但在一个特定情况下,我需要一个实际的列表,而不是LINQ查询返回的IEnumerable 我可以使用psec.ToList()获取我的列表

我有一个关于LINQ、
IEnumerable
List
的问题

当我有一个
列表
并想对其进行过滤或搜索时,我使用LINQ如下:

var psec = from p in MyListOfSomeObjects
           where ((p.Tipo == tipo) || (p.Tipo == null))
           select p;
但在一个特定情况下,我需要一个实际的
列表
,而不是LINQ查询返回的
IEnumerable

我可以使用
psec.ToList()
获取我的
列表
,但我的问题是:

方法
ToList()
是否浪费时间或计算机资源?它是否在
IEnumerable
中进行迭代或循环以构建
列表

方法Tolist()是否浪费时间或计算机资源

视情况而定。如果你需要一份清单,那么它很可能不是一种浪费。它确实使用时间和资源来构建列表

在IEnumerable psec中进行迭代或循环以构建列表吗

对。它遍历可枚举项并根据其中的项构建列表


通常,如果您的目标只是枚举结果(即:在
foreach
循环中使用),则无需通过
ToList()
转换为
列表,这样做只是浪费。

如果您将其用作单个LINQ语句,你知道托尔列表是否被选择到了某种程度吗?@jamesno-不管它是否在一个“声明”中完成。编译器以同样的方式处理它,它只是一个方法调用
ToList()
just(有效地)返回
newList(sourceEnumerable)
@James它实际上与您所做的完全相同:
List newList=newList(psec)