Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
.NET 4.x

Непонятка с LINQ и поиском по List<T>

28.11.2017, 21:28. Показов 4805. Ответов 70
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Trees
{
    public bool HaveRoots { get; set; }
}
 
    class Program
    {
        static void Main(string[] args)
        {
            List<Trees> trees = new List<Trees>();
            Trees oneTree = new Treees(){HaveRoots = true};
 
            if (trees.Any(t => t.HaveRoots != oneTree.HaveRoots))
            {
                Console.WriteLine("Деревко подрезали с корнем");
            }
            Console.ReadLine();
        }
    }
Почему Any() "не может подрезать деревко"? (условие не выполнено без выброса исключений или ещё чего)

Добавлено через 1 минуту
Интересует логика программиста, создавшего Any()
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.11.2017, 21:28
Ответы с готовыми решениями:

Linq преобразование List<List<double>> в List<Array>
Доброго времени суток, данный код нужно преобразовать linq выражениями и дописать выборку из List&lt;List&lt;double&gt;&gt;. Таким...

Непонятка наследования интерфейсов в list
Проблему лучше опишу на &quot;пальцах&quot;: Скажем есть интерфейс IMyInterface. Его реализует класс MyClass. Естественно конструкция...

Работа с List<> , linq и БД
List&lt;DataTable&gt; listOFTables = new List&lt;DataTable&gt;(); DataTable dt = new DataTable(); public DataTable...

70
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 13:36
Студворк — интернет-сервис помощи студентам
Не уловил связи.

Добавлено через 4 минуты
Элементы перебираются по порядку, пока не найдётся совпадение или пока не кончатся элементы. Очевидно, что второе условие проверяется сразу и ничего в пустой коллекции не проверяется. В чём логическая ошибка? Что вас не устраивает?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 13:41  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Не уловил связи.
"Это прхескорхбно"
Цитата Сообщение от Usaga Посмотреть сообщение
Что вас не устраивает?
Выше по теме писал.
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 13:50
Цитата Сообщение от skilllab Посмотреть сообщение
Выше по теме писал.
Если вы про "Василича", то оно не связано с логикой Any().
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 14:13  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
про "Василича"
В очередной раз замечаю за вами, что приходится цитировать себя же с предыдущей страницы чтоб показать о чём речь. Не хочу))) Нет, не про Василича.

А вот про Василича:

Про перебор.
- Василич, перебери все ключи в пустом ящике
- Петрович, так он же пустой!
- Тогда ничо не делай.

Про Any
- Василич, для любого ключа в пустом ящике сравни вот этот засаленный, и если найдёшь несовпадение по размеру, то положи в ящик.
- ... ???
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 14:16
Цитата Сообщение от skilllab Посмотреть сообщение
Василич, перебери все ключи в пустом ящике
Когда вы вызываете Any() над коллекцией, то вы не знаете есть в ней что-то или нет (для того вы данный метод и вызываете, так ведь?). Если же знаете заранее, что она пуста, то данный вызов бесмысленнен. Так что аналогия с Васильичем не подходит.

Добавлено через 25 секунд
Цитата Сообщение от skilllab Посмотреть сообщение
В очередной раз замечаю за вами, что приходится цитировать себя же с предыдущей страницы чтоб показать о чём речь. Не хочу))) Нет, не про Василича.
Видимо я такой невнимательный. Можно было бы просто номер поста указать.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 14:19  [ТС]
Могу дальше про Василича:
- Василич, для любого ключа в пустом ящике сравни вот этот засаленный, и если найдёшь несовпадение по размеру, то положи в ящик.
- А что если ящик пустой?
- Тогда уведоми Петровича, ибо он месяц назад должен был ящик заполнить.
- А можно я не буду уведомлять Петровича что ящик пустой для любого моего сравнения?
- Можно, это абсолютно логично.
- Так а что потом с ключом засаленным делать? Совпадений же нет.
- Выкинь
- Оке. Если ящик пустой никому об этом не говорить, а единственный ключ "на 20" на весь шиномонтаж выкинуть. Принято.

0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 14:22  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Any -- любой, какой-либо, какой-нибудь, сколько-нибудь
Открыв редактор кода я чётко вижу что заложил разработчик.
Там нет "сколько-нибудь". Для того и пишут Summary.
Миниатюры
Непонятка с LINQ и поиском по List<T>  
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 14:23
Цитата Сообщение от skilllab Посмотреть сообщение
- А можно я не буду уведомлять Петровича что ящик пустой для любого моего сравнения?
Any() возвращает TRUE если хоть один из элементов коллекции подпадает под условие. С какого перепугу отсутствие элементов должно трактоваться как-то по особому?
Миниатюры
Непонятка с LINQ и поиском по List<T>  
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 14:26
Цитата Сообщение от skilllab Посмотреть сообщение
Открыв редактор кода я чётко вижу что заложил разработчик.
Тогда что вам ещё надо?

Добавлено через 1 минуту
Может с Васильичем будет нагляднее:
- Сколько у нас ключей "на 20"?
Васильич смотрит в пустой ящик:
- Ноль.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 14:28  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Если же знаете заранее, что она пуста, то данный вызов бесмысленнен
Пфф...ну включите воображение!
Если у вас нет ключа "на 20" (подаренном вам Василичем) в коробке с ключами на 20. Вы ключ выкинете?

Или ещё так: вам подарили слиток золота на 1 килограмм. У вас есть маааленький ящик, на котором написано "только для слитков золота на 1 кг как в ящике". Вы подходите к ящику, открываете его, и ... выкидываете слиток, ибо он не подошёл так как ящик пустой. По-вашему именно так звучит слово "логично"
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 14:37
skilllab, вы пытаетесь увидеть проблему там, где её нет?

Добавлено через 2 минуты
Цитата Сообщение от skilllab Посмотреть сообщение
Пфф...ну включите воображение!
Если у вас нет ключа "на 20" (подаренном вам Василичем) в коробке с ключами на 20. Вы ключ выкинете?
Не нужно тут воображение. У вас есть ящик. На нём не написано какие в нём ключи. Чтобы узнать это, вы вызваете Any()\Васильича.

Цитата Сообщение от skilllab Посмотреть сообщение
Или ещё так: вам подарили слиток золота на 1 килограмм. У вас есть маааленький ящик, на котором написано "только для слитков золота на 1 кг как в ящике". Вы подходите к ящику, открываете его, и ... выкидываете слиток, ибо он не подошёл так как ящик пустой. По-вашему именно так звучит слово "логично"
ANY не проверяет, что написано на ящике. Хотите такую проверку - реализовывайте. Any ищет среди того, что есть (если есть).

Добавлено через 6 минут
skilllab, если проблему нельзя увидеть не включив "воображение\фантазию" и не прибегнув к аналогиям с Васильичами, то это означает только одно - проблемы нет.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 14:59  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
то это означает только одно - проблемы нет.
Подход ваш тоже вполне очевиден.
Если бы программисты были врачами, им бы говорили «У меня болит нога», а они отвечали «Ну не знаю, у меня такая же нога, а ничего не болит».
Я лишь обсуждаю тему. Никому ничего не доказывая. Просто высказываю мысли и может чуток "хотелок" )))
А вот вы мне уже вторую страницу пытаетесь доказать что "некой проблемы нет". и я с вами (с другими, со всеми) согласен проблемы нет. Если бы вы читали топики, и этот в частности, то поняли о чём я.
Но есть недосказанность)))
Я вашу точку зрения увидел, принимаю, согласен - проблемы в исходниках нет. Ладушки?

Добавлено через 9 минут
Цитата Сообщение от Usaga Посмотреть сообщение
и не прибегнув к аналогиям с Васильичами
сообщение №26 полностью раскрывает работу метода Any() Даже воображения не надо. Достаточно Василича.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.11.2017, 15:16
Цитата Сообщение от skilllab Посмотреть сообщение
общение №26 полностью раскрывает работу метода Any()
Без обид, но в сообщении №26 не написано ничего даже похожего на работу метода Any.
То есть ни одна строчка "диалога" не описывает правильно какую-либо часть работы этого метода.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 15:30  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
Без обид
Ни в коем случае.
Могу ли я увидеть сообщение, подробно описывающее (хосспади, 5 строчек текста) работу метода Any на примере Василича, ключа "на 20", пустого ящика?

Добавлено через 8 минут
Естественно, с применением метода Any к Василичу с ключом.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.11.2017, 15:38
Цитата Сообщение от skilllab Посмотреть сообщение
Могу ли я увидеть сообщение, подробно описывающее (хосспади, 5 строчек текста) работу метода Any на примере Василича, ключа "на 20", пустого ящика?
Примерно так:
— Василич, в ящике с инструментами есть ключ на 20?
Василич открывает ящик, он пуст:
— Нет.

Если ящик не пуст:
— Василич, в ящике с инструментами есть ключ на 20?
Василич открывает ящик и по одному проверяет ключи на размер. Если найден на 20:
— Есть.
Если перебрал все ключи и не нашел на 20:
— Нет.
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 16:08  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
— Василич, в ящике с инструментами есть ключ на 20?
Василич открывает ящик, он пуст:
— Нет.
Что могло бы звучать на американском как
C#
1
ящик.Has(k=>k.на20 == уВасиличаВРуке.20)
Имеет ли ящик ключ на 20? ))) Не имеет, ибо коллекция пуста.

C#
1
ящик.Any(k=>k.на20 == уВасиличаВРуке.20)
Для любого ключа в ящике, который удовлетворяет условию.

В первом случае я, даже не зная хорошо американский, могу утверждать что я проверил ящик на наличие и совпадение и пустоту. Во втором я перебираю пустой ящик руками))) и не нахожу совпадения условия с пустотой. Не нашёл, всё логично.

Добавлено через 5 минут
Показал сей код с исходниками на List<T> и Any() соседу Си-шнику (в почти отличной форме владеющему американским). Посмотрев на строчку кода с
C#
1
if (trees.Any(r=>r.HaveRoots != oneTree.HaveRoots))
его мнение совпало с моим, что в Any() хорошо бы иметь проверку что коллекция пуста.

Добавлено через 15 минут
Во ещё, про это не знал))
https://msdn.microsoft.com/ru-... .110).aspx

C#
1
2
3
4
5
6
7
8
9
List<int> numbers = new List<int> { 1, 2 };
bool hasElements = numbers.Any();
 
Console.WriteLine("The list {0} empty.",
    hasElements ? "is not" : "is");
 
// This code produces the following output:
//
// The list is not empty.
Шикаарно
C#
1
if (trees.Any() && trees.Any(r=>r.HaveRoots != oneTree.HaveRoots))
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
29.11.2017, 16:13
Цитата Сообщение от skilllab Посмотреть сообщение
Что могло бы звучать на американском как
То же самое.

Цитата Сообщение от skilllab Посмотреть сообщение
Для любого ключа в ящике, который удовлетворяет условию.
— Are there any keys of size n?
— No.

Цитата Сообщение от skilllab Посмотреть сообщение
могу утверждать что я проверил ящик на наличие и совпадение и пустоту.
Из слова has никак не следует проверка на пустоту.

Цитата Сообщение от skilllab Посмотреть сообщение
Не нашёл, всё логично.
Слишком мудрите, все гораздо проще: метод отвечает на вопрос: имеется ли в коллекции хотя бы один элемент, удовлетворяющий условию? В пустой коллекции таких элементов нет, все логично.

Цитата Сообщение от skilllab Посмотреть сообщение
его мнение совпало с моим, что в Any() хорошо бы иметь проверку что коллекция пуста.
Поскольку Any принимает на вход IEnumerable, проверку на пустоту невозможно сделать без обхода коллекции, так что смысл в проверке отпадает даже чисто технически.
Ну и метод называется Any, а не AnyOrEmpty.

Добавлено через 3 минуты
Цитата Сообщение от skilllab Посмотреть сообщение
Шикаарно
То есть вам просто нужна была проверка на пустоту коллекции в дополнение к проверке на наличие в ней элемента, соответствующего условию?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 16:33  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
— Are there any keys of size n?
Эммм. Имхуется, что предложение подразумевает коллекцию, среди которой надо выбрать. Коллекция есть, но пустая))) Всё верно, в пустой коллекции ничего нет.

- Is there a "20" key in the box? - я заглядываю и вижу пустую коллекцию, а не выбираю из "ничего".
- No.- ладушки.

Цитата Сообщение от kolorotur Посмотреть сообщение
Из слова has никак не следует проверка на пустоту.
Как и из Any(). Но при "Has" я точно понимаю, что я не перебираю пустую коллекцию (или ваще ничо не делаю если коллекция пуста), а именно удостоверяюсь что в пустой или не пустой коллекции нет элемента, что коллекция прям сразу не имеет элемента (не заглядывая в сорцы некоего "Has()").

Цитата Сообщение от kolorotur Посмотреть сообщение
проверку на пустоту невозможно сделать без обхода коллекции
??? В сообщении 12 есть пример что могло бы быть.

Цитата Сообщение от kolorotur Посмотреть сообщение
То есть вам просто нужна была проверка на пустоту коллекции
Теперь да)))
А позавчера я без зазрения совести строчил код с Any(), подразумевая что элемент добавится в коллекцию, если Any() в блоке if не нашёл совпадений. Как бы если не с чем сравнивать, значит условие в предикате выполнено. Ибо коллекция не null, предикат не null.

Возвращаясь к сообщению 26, то я бы на месте Василича положил бы таки ключ на 20 в ящик, а не выкинул бы.

Добавлено через 2 минуты
Ну на крайняк, если б у меня стоял триггер "информировать коллег о том что прое...теряли всю коллекцию ключей, и типа не с чем сравнивать", то я б Петровичу пожаловался))) что ящик пуст/
0
Эксперт .NET
 Аватар для Usaga
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,928
29.11.2017, 17:18
skilllab, ну так вы разобрлись как работает Any() и почему он так работает?
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,051
Записей в блоге: 1
29.11.2017, 17:21  [ТС]
Usaga, ещё в сообщении 9. Но вот уже 3-ю страницу протестую против семантики имени метода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2017, 17:21

List<>[] перевести в [][] используя Linq
Как перевести массив списков в массив массивов 1 строчкой?

Как значения LINQ поместить в List
В общем есть метод, туда попадают шесть значений LINQ запросом... как мне эти значения засунуть в List? ...

Добавить результат LINQ запроса в конец List<>
Имеется Linq запрос возвращающий несколько строковых значений. Есть List&lt;string&gt; который уже содержит несколько элементов Как результат...

Запрос LINQ к List, как выбрать определенный элемент из списка
Подскажите как выбрать определенный элемент из списка? public class PostTarif { public double Weight {...

LINQ при привязке List<string[]> к DataGrid.DataContext через IBindingList
Приветствую сообщество. Что неправильно в выражении LINQ, приведенном ниже ? Дебаггер показывает что X_loc прекрасно формируется, но...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru