gpt4 book ai didi

c# - List<> 与 ToList() 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 22:41:30 27 4
gpt4 key购买 nike

我有一个字符串集合作为一个 Enumerable(例如,假设它是对集合的一些 linq 查询的结果)。

IEnumerable<string> myStrings;

下面有什么区别

一个。

result = myStrings as List<string>;

b.

result = myStrings.ToList();

一个比另一个更有效率吗?选项 b 会改变 myStrings 本身吗?

最佳答案

选项 a - result=myStrings as List<string>是一种类型转换并知道给定类型是否包含 List<string> 的安全方法在内部,没有额外的内存分配,因为它是类型转换,它可以在任何类型/对象上完成。如果类型转换失败,则结果为 null , 也不异常(exception),如果您尝试 (List<string>) myStrings 可能会出现反而。

事实上更好的方法 - is运算符(operator),myStrings is List<string> result (称为模式匹配是表达式)它提供 bool 结果,如果为真,它会在结果变量中产生有效值(is 运算符已经存在了很长一段时间,但使用变量 result 进行模式匹配,它跨越了 if 循环并且可以在之后的逻辑中使用是 C# 7.1 的特性

与此相比:

选项 b - result=myStrings.ToList()是对 IEnumerable<T> 的扩展方法调用, 它分配并创建新的 List<T>数据结构。这始终是额外的内存分配。以下是 Enumerable.ToList() 的源代码打电话,link

 public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
return new List<TSource>(source);
}

关于c# - List<> 与 ToList() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52024534/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com