Re[9]: Почему не используется оператор + для списков и пр.?
От: karbofos42 Россия  
Дата: 21.11.18 22:37
Оценка:
Здравствуйте, 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>, какой тип должен возвращать? Или всё преобразовывать к одинаковому типу и поддерживать только сложение однотипных переменных?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.