Я пересматривал код и позволял ReSharper немного помогать мне. Я получил этот кусок кода:Разница между 'как dynamic []' и ToArray()
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()
? Является ли более эффективным, чем другой? Более надежный?
'.ToArray()' создает новый массив, а затем копирует все элементы. Если 'records' уже является массивом, то это работа, которую не нужно делать, поэтому они пытаются напрямую применить ее к' dynamic [] '. –