Здравствуйте, Shmj, Вы писали:
S>Здравствуйте, #John, Вы писали:
S>>>В чем неопределенность поведения?
J>>Что бы возникло исключение .net framework придется перебрать все ключи одного Dictionary и сравнить с каждым ключем со второго .
J>>А это повидение совсем отличается от повидения: "просто создать новый список и скопировать память из двух других."
S>Понятно что это просто синтаксический сахар, т.е. не ради прироста скорости а ради простоты написания.
S>И еще. Для словарей это не так уж нужно. А вот для массивов и списков — было бы весьма, так как копировать приходится довольно часто (и здесь то можно было бы применить низкоуровневое копирование):
S>S>byte[] prefix = {1, 2, 3};
S>byte[] body = { 4, 5, 6 };
S>byte[] suffix = { 7, 8, 9 };
S>return prefix + body + suffix;
S>
S>Красота?
В итоге сначала выделяем память под массив prefix + body и копируем туда элементы обоих массивов. Потом опять выделяем память уже под результирующий массив и опять туда копируем элементы уже трёх массивов (для двух из них второй раз одно и то же делаем по сути)?
Такая себе красота.
Так же в жизни вся эта красота поплывёт, потому что будет что-то типа:
IEnumerable<byte> prefix;
List<byte> body;
byte[] suffix;
и непонятно как себя должен вести IEnumerable<byte> + List<byte>, какой тип должен возвращать? Или всё преобразовывать к одинаковому типу и поддерживать только сложение однотипных переменных?