'as dynamic[]' 和 ToArray() 之间的区别
Difference between 'as dynamic[]' and ToArray()
我正在重构一些代码,让 ReSharper 帮我解决了一些问题。我得到了这段代码:
IEnumerable<dynamic> records = ...;
ScheduleTemplateInfo[] resultTemplateInfos = new ScheduleTemplateInfo[records.Count()];
这里他警告我可能会有一个Possible multiple enumeration of IEnumerable
。所以我让 ReSharper 重构,他给了我这个:
IEnumerable<dynamic> records = ...;
dynamic[] recordsAsArray = records as dynamic[] ?? records.ToArray();
ScheduleTemplateInfo[] resultTemplateInfos = new ScheduleTemplateInfo[recordsAsArray.Length];
现在,我想乍一看确实更有效率。但是,我对插入的第二行感到好奇。
录制唱片as dynamic[]
和制作唱片.ToArray()
有什么区别?一个比另一个更有效率吗?更万无一失?
records
以 IEnumerable<dynamic>
开头。这意味着它实际上可以是实现 IEnumerable<dynamic>
的任何东西,包括数组。它可能是 List<dynamic>
或其他十几种集合类型之一。
它想创建dynamic[]
。如果 records
已经 恰好是 类型 dynamic[]
,则 records as dynamic[]
将强制转换它并 return 它。如果不是,该特定表达式将 return null
,将空合并运算符 (??
) 留在右侧 return。
右侧在 records
恰好是什么类型上运行 LINQ 方法 .ToArray()
,这会将其转换为 dynamic[]
并且可能涉及比简单演员表。
根据此处实际发生的情况,您也许可以自己稍微改变一下 - 例如,如果您知道 ...;
部分 never return是一个 dynamic[]
,你也可以只 records.ToArray()
而没有强制转换检查。
我正在重构一些代码,让 ReSharper 帮我解决了一些问题。我得到了这段代码:
IEnumerable<dynamic> records = ...;
ScheduleTemplateInfo[] resultTemplateInfos = new ScheduleTemplateInfo[records.Count()];
这里他警告我可能会有一个Possible multiple enumeration of IEnumerable
。所以我让 ReSharper 重构,他给了我这个:
IEnumerable<dynamic> records = ...;
dynamic[] recordsAsArray = records as dynamic[] ?? records.ToArray();
ScheduleTemplateInfo[] resultTemplateInfos = new ScheduleTemplateInfo[recordsAsArray.Length];
现在,我想乍一看确实更有效率。但是,我对插入的第二行感到好奇。
录制唱片as dynamic[]
和制作唱片.ToArray()
有什么区别?一个比另一个更有效率吗?更万无一失?
records
以 IEnumerable<dynamic>
开头。这意味着它实际上可以是实现 IEnumerable<dynamic>
的任何东西,包括数组。它可能是 List<dynamic>
或其他十几种集合类型之一。
它想创建dynamic[]
。如果 records
已经 恰好是 类型 dynamic[]
,则 records as dynamic[]
将强制转换它并 return 它。如果不是,该特定表达式将 return null
,将空合并运算符 (??
) 留在右侧 return。
右侧在 records
恰好是什么类型上运行 LINQ 方法 .ToArray()
,这会将其转换为 dynamic[]
并且可能涉及比简单演员表。
根据此处实际发生的情况,您也许可以自己稍微改变一下 - 例如,如果您知道 ...;
部分 never return是一个 dynamic[]
,你也可以只 records.ToArray()
而没有强制转换检查。