Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172

Чем отличаются два фрагмента кода?

03.02.2023, 13:29. Показов 1046. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
//Почему-то не работает
for (int i = 0; i < post.role_name.Length; i++)// post.role_name.Length=2
{
    TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[i]));
}
 
// Почему-то работает 
TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[0]));
TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[1]));
Настолько в недоразумении, что никак не могу понять, в чем причина ошибки выхода индекса за пределы. Ошибка вызывается не в цикле, а в return, но ошибка всё таки в цикле и я не понимаю почему, если всё выполняется согласно условию
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2023, 13:29
Ответы с готовыми решениями:

Чем отличаются два вывода в конце кода?
Чем отличаются два вывода в конце кода? Console.WriteLine(&quot;Номер человека, который остался {0}&quot;, i + 1); и Console.Write(&quot;Номер...

Чем отличаются эти два процессора?
Есть два процессора: pentium 4 2.8 ГГц/512кб/533МГц/478-PGA и pentium 4 3.0Е ГГц/1мб/800МГц, цены у них почти одинаковые. Чем же они...

Шаблоны, чем отличаются два шаблона
Доброго времени суток! Продолжил читать книгу &quot;Решение сложных задач на С++&quot;, в ней есть задача - отправка содержимое из потока ввода в...

15
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 13:50
В первом случае всегда учитывается длина массива post.role_name.Length, а во втором вы делаете предположение, что длина всегда равна двум. А если она равна единице?

Добавлено через 34 секунды
Зачем обобщенные решения менять на частные?
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 13:59  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
А если она равна единице?
А я проверяю на длине равной двум. Тут неважно какой длины массив, индекс никогда не будет равен длине массива и от того оно и не выдает ошибку выхода за предел в цикле
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 14:02
Цитата Сообщение от Bigtagilboss Посмотреть сообщение
и от того оно и не выдает ошибку выхода за предел в цикле
Угу.

А если длина равна единице, то этот код будет работать?
C#
1
2
3
// Почему-то работает 
TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[0]));
TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[1]));
Добавлено через 1 минуту
Магии не бывает, если вы получаете
Цитата Сообщение от Bigtagilboss Посмотреть сообщение
в чем причина ошибки выхода индекса за пределы
То значит длина была меньше двух.
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:04  [ТС]
IamRain, Это для примера, что вот у цикла 2 итерации выполняются, значит там происходит именно такая логика, два раза одинаковая строка, отличается только индекс

Добавлено через 44 секунды
Цитата Сообщение от IamRain Посмотреть сообщение
То значит длина была меньше двух.
Нет, она равна двум
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:07  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
То значит длина была меньше двух.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 14:10
Bigtagilboss, ответ на вопрос
Цитата Сообщение от Bigtagilboss Посмотреть сообщение
Чем отличаются два фрагмента кода?
будет такой:
Два фрагмента кода отличаются тем, что первый фрагмент учитывает длину входящей коллекции (непонятно чего), а второй - нет.
Всё.

Добавлено через 1 минуту
Bigtagilboss,
Тогда текст исключения вместе со стектрейсом в студию. Магии не бывает (Бывает разный уровень компетенций).
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:14  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Тогда текст исключения вместе со стектрейсом в студию
System.InvalidOperationException: "An exception was thrown while attempting to evaluate a LINQ query parameter expression. See the inner exception for more information. To show additional information call 'DbContextOptionsBuilder.EnableSensitive DataLogging'."

Внутреннее исключение
IndexOutOfRangeException: Index was outside the bounds of the array.
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 14:35
Полный стектрейс не так выглядит.
Впрочем на поставленный в теме вопрос вам уже ответили.
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:39  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Впрочем на поставленный в теме вопрос вам уже ответили.
Замечательный ответ... "Это не магия, это кто-то просто тупой". Спасибо большое, лучше бы не отвечали. Но спасибо за разъяснение про отличия, оно не помогло
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 14:42
Bigtagilboss, IEnumerable - он ленивый.
Материализация его происходит в момент перечисления.
Внимание, вопрос(!): сколько элементов в массиве post.role_name на момент материализации коллекции?
Это вам отправная точка для размышлений.

Вдовесок, ответьте на первый вопрос:
Цитата Сообщение от IamRain Посмотреть сообщение
Зачем обобщенные решения менять на частные?
0
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:49  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Зачем обобщенные решения менять на частные?
Не меняю. Изначально у меня было в планах сделать через заранее неизвестную длину массива, как было так и осталось. Это просто сравнение.

Цитата Сообщение от IamRain Посмотреть сообщение
сколько элементов в массиве post.role_name на момент материализации коллекции?
Самым первым при вызове метода аяксом получаются все элементы в post, потом уже наполняется коллекция, так что в данном случае ровно 2 элемента
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
03.02.2023, 14:49
Лучший ответ Сообщение было отмечено Bigtagilboss как решение

Решение

Bigtagilboss, в цикле возникает IndexOutOfRangeException из-за замыкания (closure) переменной i. Метод Where использует отложенное исполнение и поэтому на момент его исполнения переменная i будет равна 2.

Варианты исправления.

C#
1
2
3
4
5
6
// 1) Вводим доп. переменную
for (int i = 0; i < post.role_name.Length; i++)// post.role_name.Length=2
{
    int idx = i;
    TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[idx]));
}
C#
1
2
3
4
5
// 2) Избавляемся от отложенного выполнения (ценой лишних затрат памяти)
for (int i = 0; i < post.role_name.Length; i++)// post.role_name.Length=2
{
    TableUser = TableUser.Where(p => p.ROLE_NAME.Contains(post.role_name[i])).ToArray();
}
C#
1
2
// 3) Переписываем код
TableUser = TableUser.Where(p => post.role_name.All(r => p.ROLE_NAME.Contains(r)));
2
 Аватар для Bigtagilboss
1 / 1 / 0
Регистрация: 03.06.2020
Сообщений: 172
03.02.2023, 14:54  [ТС]
OwenGlendower,
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Метод Where использует отложенное исполнение
это означает, что оно вот в самом начале заводится, а вот выполняется где-то позже?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
03.02.2023, 15:00
OwenGlendower, благодарю за помощь.
Невнимательно вник в проблему.
2
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
03.02.2023, 16:47
Лучший ответ Сообщение было отмечено Bigtagilboss как решение

Решение

Цитата Сообщение от Bigtagilboss Посмотреть сообщение
это означает, что оно вот в самом начале заводится, а вот выполняется где-то позже?
Да. Вот простая иллюстрация
C#
1
2
3
4
5
6
7
8
9
10
var fruits = new List<string> { "apple", "passionfruit", "banana", "mango", "orange", "grape", "strawberry" };
IEnumerable<string> query = fruits.Where(fruit => fruit.StartsWith('b'));
 
fruits.Add("blueberry");
 
// Цикл выведет banana и blueberry несмотря что blueberry был добавлен после вызова Where
foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.02.2023, 16:47
Помогаю со студенческими работами здесь

Чем отличаются два приведенные способа Return
Здравствуйте знатоки С# Есть функция private static Tree FindMin(Tree sourse) { Чем отличается эти два куска кода if...

Ссылка и указатель: чем отличаются заданные фрагменты кода?
1 int *p; int *q; p = new int; q = new int; *p = 1; *q = 2; p = q; *q = 3;

Чем отличаются эти два способа изменения типа данных?
В книге Лафоре дают такой способ int buf; ofstream os(&quot;edata.dat&quot;,ios::binary); ...

Верно ли, что два массива отличаются не более чем порядком следования элементов?
2. Верно ли, что два массива которые могут содержать повторяющиеся элементы отличаются не более чем порядком их следования. Добавлено...

Верно ли, что два массива отличаются не более чем порядком следования элементов? (Си/С++)
Даны целые числа. В массиве а n-элементов и в массиве b n-элементов. Верно ли, что эти 2 массива отличаются не более, чем порядком...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru