667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|||||||||||
1 | |||||||||||
Почему read only?30.11.2020, 17:53. Показов 2704. Ответов 18
Метки нет (Все метки)
Ошибка CS0200 Невозможно присвоить значение свойству или индексатору "KeyValuePair<string, int>.Value" — доступ только для чтения. Это как простой вариант, а вообще я делаю выгрузку в List<KeyValuePair<string, int>> и при попытке изменить Value для одного из элементов списка точно такая же ошибка.Судя по MSDN Свойства Видимо подразумевается только чтение данных, тогда каким образом из Dictionary можно забирать данные в списки или массивы чтобы потом их можно было бы менять? Добавлено через 2 часа 1 минуту Решение:
0
|
30.11.2020, 17:53 | |
Ответы с готовыми решениями:
18
Память не может быть Read, Почему так ??? Почему в Read у FileStream offset это смещение в байтах? Выдает ошибку i/o error 6 в delphi она останаливается на Read не пойму почему? Почему Read работает как Readln? (ide PascalABC.NET 3.10 build 1200) |
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
|
|
01.12.2020, 07:47 | 2 |
Потому, что KeyValuePair - значимый тип.
Вот реальный код и надо было показывать, потому, что код с массивами такой проблемы не даёт. Если вы не знаете, что такое значимые типы, то не трогайте их, если это возможно. В вашем варианте не надо использовать KeyValuePair, заведите нормальный класс с двумя свойствами имеющими нормальные говорящие названия. С классами вы этой проблемы не получите.
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
||||||
01.12.2020, 07:55 [ТС] | 3 | |||||
с массивами проблема сохраняется. Просто в решении результат двух этапов, первый - переход от List к Array и второй - замена прямого присвоения на new, именно последнее работает.
0
|
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
|
|
01.12.2020, 08:03 | 4 |
Это из-за того, что структура только для чтения:
Ещё можно только целиком заместить другой. Какой тип имеет Freq и что вы в итоге хотите сделать?
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|||||||||||
01.12.2020, 08:26 [ТС] | 5 | ||||||||||
<string, int> для чтения и записи, размеры такого списка/массива пока менять не планирую.Создать свою структуру с полями <string, int> и загнать её в массив? А выгрузка в такой массив из словаря каким образом случится, по foreach?
0
|
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
|
|
01.12.2020, 08:40 | 6 |
Так у вас уже есть словарик со всеми парами.
Не структура, а класс. Но у вас уже есть словарик. Его и использовать желательно.
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|
01.12.2020, 08:52 [ТС] | 8 |
Не спорю, но как по мне в большинстве случаев для таких простых вещей класс не требуется.
Как ранее писал Элд Хасп - словарик не слишком удобен в ряде ситуаций, например нет доступа по индексу (или это рождает неопределенность), нет возможности иметь два одинаковых ключа, нет возможности менять ключ и т.п. Я посмотрю, можно ли как-то изменить код чтобы остаться в работе со словарём. Добавлено через 43 секунды ошибся темой
0
|
12547 / 8705 / 1311
Регистрация: 21.01.2016
Сообщений: 32,702
|
|
01.12.2020, 10:06 | 9 |
Требуется, если нет необходимости озадачиться оптимизациями. Со структурами нужно аккуратно обращаться.
Потому, что порядок неопределён. Но есть доступ по ключу. Есть. Просто значением может выступать коллекция. Тогда одному ключу может соответствовать произвольное количество значений. Есть: удаляете значение со старым ключом, вносите с новым.
0
|
Модератор
|
||||||||||||||||
01.12.2020, 14:09 | 10 | |||||||||||||||
belalugoci, KeyValuePair создан специально под реализацию Нетовского словаря.
И не надо его использовать вне него. Это не запрещено и возможно, но может создать кучу проблем. В простейшем случае создайте массив кортежей:
Если вам надо менять одно из свойств по индексу, то надо создать свой ССЫЛОЧНЫЙ тип:
1
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|||||||||||
01.12.2020, 17:09 [ТС] | 11 | ||||||||||
не совсем понятно откуда появилась
a[0] , например я пишу
Добавлено через 17 минут
Ошибка CS0411 Аргументы типа для метода "Enumerable.Append<TSource>(IEnumerable<TSource>, TSource)" не могут определяться по использованию. Попытайтесь явно определить аргументы типа.
0
|
Модератор
|
||||||
01.12.2020, 17:53 | 12 | |||||
Ну, это ваш же код из первого поста.
Я откуда могу знать откуда вы его взяли? Если Freq - это Dictionary<string, int>(), то так:
Раз вам был нужен массив, то по индексу. А какие ещё могут быть варианты? Добавлено через 2 минуты А что вы хотите собственно сделать методом Append? Это метод расширения LINQ и он не изменяет исходной коллекции. В параметрах он принимает тип элемента коллекции, а не ключ или значение. Если же вы его переопределили, то я не видя реализации не могу сказать причины ошибки.
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
||||||||||||||||
02.12.2020, 11:45 [ТС] | 13 | |||||||||||||||
сериализовал этот тип
Ошибка:
System.InvalidCastException
0
|
Модератор
|
||||||||||||||||
02.12.2020, 12:44 | 14 | |||||||||||||||
Вы сериализовали не тип, а массив с элементами этого типа.
Такая сериализация может создать проблемы в виду введения в сохраняемые данные дополнительных атрибутов. При бинарной сериализации это трудно понять. Но если сделаете XML сериализацию, то будет видно наглядно. Создайте свой тип и сериализуйте его.
И покажите реализацию вашего типа KeyPair.
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
||||||
02.12.2020, 13:27 [ТС] | 15 | |||||
запустил на проверку.
там XML будет весом 3-4 гига. И я плохо читаю XML/HTML. Но это мои проблемы. Добавлено через 3 минуты
проблема сохраняется.
0
|
Модератор
|
|
02.12.2020, 13:40 | 16 |
Не обязательно сериализовать большой массив.
Сделайте маленький с 3-5 элементами. И посмотрите, что бы самому понять. Добавлено через 27 секунд Попробую у себя с вашей реализацией.
0
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|
02.12.2020, 13:42 [ТС] | 17 |
даже если я увижу что в одном случае А, а в другом Б - то я всё равно не знаю что мне с этой информацией делать.
0
|
Модератор
|
|||||||||||
02.12.2020, 13:52 | 18 | ||||||||||
У меня работает без каких либо проблем.
Вот реализация:
1
|
667 / 264 / 28
Регистрация: 01.06.2018
Сообщений: 3,353
|
|
03.12.2020, 05:06 [ТС] | 19 |
проверил ваш пример, у меня тоже работает, сравнил с тем, как реализовано у меня - разница только в использовании FileStreamer, переделал на File.Create/OpenRead - и всё сразу заработало. Проверять подробнее не стану, буду пользоваться так.
0
|
03.12.2020, 05:06 | |
03.12.2020, 05:06 | |
Помогаю со студенческими работами здесь
19
Почему Reader.Read() начинает чтение не с первой строки данного столбца? Класс Oledb Bluetooth Android. read failed, socket might closed or timeout, read ret: -1 А почему ошибка, что функции print и read не определены в функции main()? Почему такая ошибка "TypeError: Cannot read property 'bind' of undefined"? Почему выбивает ошибку "Uncaught TypeError: Cannot read property '0' of undefined"? В чем отличие read от read-line Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |