но неужели нет способа легче?Они все сводятся к этому способу.
Если я захочу использовать не foreach, а просто for, как мне узнать значение для окончания цикла?Никак. Эта коллекция не имеет свойства, которое возвращает количество элементов.
Есть такой вариант: https://adn-cis.org/byistroe-poluchenie-kolichestva-primitivov-v-prostranstve-modeli.htmlЯ находил этот пример и его вариации, мне они показались слишком мудрёнными. Я находил Ваш пост от 2010 года, но он почему-то не заработал.
Но не думаю, что он быстрее обычного цикла.
Я находил Ваш пост от 2010 года, но он почему-то не заработал.Это тоже самое, только на VB.NET, так как спрашивали код именно на нём.
https://forums.autodesk.com/t5/net/fast-methode-to-detect-the-modelspace-count/m-p/2861364#M21920
Да вот только у меня не показывает такого метода.Я находил Ваш пост от 2010 года, но он почему-то не заработал.Это тоже самое, только на VB.NET, так как спрашивали код именно на нём.
https://forums.autodesk.com/t5/net/fast-methode-to-detect-the-modelspace-count/m-p/2861364#M21920
На C#:Код - C# [Выбрать]
btr.Cast<ObjectId>().Count();
Да вот только у меня не показывает такого метода.Это у тебя есть:
Круто, спасибо! Прям магия :)Да вот только у меня не показывает такого метода.Это у тебя есть:Код - C# [Выбрать]?
using System.Linq;
Есть такой вариант: https://adn-cis.org/byistroe-poluchenie-kolichestva-primitivov-v-prostranstve-modeli.html
Но не думаю, что он быстрее обычного цикла.
но в статье заголовок некорректен.Увы, но это точный перевод. Так что статью переписывать не буду. Достаточно того, что мы это обсудили. Почти со всеми замечаниями я согласен. Только вот var, в силу своей краткости, маскирует тип результирующего объекта, что не есть хорошо...
Только вот var, в силу своей краткости, маскирует тип результирующего объекта, что не есть хорошо...Я по той же причине стараюсь его использовать по минимуму. Но изучая различные комментарии и рекомендации, счел что иногда он полезен и стал применять.
Я в своём примере пробовал заменить var на ObjectId[] или ObjectIdCollection, но мне VS выдавал ошибку.Только вот var, в силу своей краткости, маскирует тип результирующего объекта, что не есть хорошо...Я по той же причине стараюсь его использовать по минимуму. Но изучая различные комментарии и рекомендации, счел что иногда он полезен и стал применять.
1. Исключение "дублирования" в коде при объявлении, например словарей:
Dictionary<int, string> dic = new Dictionary<int,string>();
Так пишется и читается легче:
var dic = new Dictionary<int,string>();
2. Скрытие промежуточных данных:
В данном примере var скрывает громоздкую часть - объявление массива, который нам не важен в данной задаче.
А посмотреть эту информацию можно, если навести на var, а также можно нажать "перейти к определению".
Также люди пишут что везде var применять не стоит, т.к. может скрыть логику программы и принести неудобство просмотра кода:
Dictionary<ObjectId, Hatch> dic = hatchIterator.GetHatch();
В данном примере можно посмотреть все типы Dictionary, ObjectId, Hatch
если переписать с var:
var dic = hatchIterator.GetHatch();
то к типам ObjectId и Hatch уже быстро не перейти с помощью "перейти к определению".
Я в своём примере пробовал заменить var на ObjectId[] или ObjectIdCollection, но мне VS выдавал ошибку.1. А зачем ты под моим комментарием написал это? Вещи не связанные!
var позволяет "экономить строки" на длинных именах. Новичков в программировании System.Collections.Generic.IEnumerable<ObjectId> отпугивает.100% наоборот - неопределенный тип данных заставляет ломать мозг, что ж там такое возвращает это ваше выражение. Если там new SomeClass(), то все понятно. А вашем случае - абсолютно непонятно. так еще и пример на форуме, а не в VS - подсказка типа не всплывет. Собственно Lemieux, тут же , в следующем комментарии, доказал, что var - это зло.
т.к. комбинации методов расширения в LINQ позволяют создать функциональный и легко воспринимаемый код.Убитьсяапстену, а не код. Вот специально в одну строку напишу:
что var - это злоЧто интересно, Microsoft в своих примерах использует var.
foreach не только короче писать, он в 100500 раз проще и понятней. И быстрее в разы. В нем вообще не создается никаких коллекций, не выделяется памяти только для того, чтоб потом пересчитать количество еще одним циклом. В нем можно выполнить всю работу за 1 цикл. В нем можно прервать итерации как только ясен результат. И т.д. и т.п. Нравятся извращения - да ради бога. Но не надо ж это пихать новичкам как полезную фичу.
p.s. Извиняюсь за эмоциональность. Карантин...
И быстрее в разы.Спорно. Скорее наоборот. Насколько мне известно, foreach вообще аутсайдер по производительности в циклах .NET. Например, тут п.6 (https://habr.com/ru/post/165729/). Не истина в последней инстанции, но есть такое мнение и оно довольно резонное. Если поискать, можно найти разные тесты по замеру производительности на разных типах циклов. В общем, про "разы быстрее" - это бабка надвое сказала.
var - это злоОпять спорно. Я не являюсь большим сторонником его использования, но злом его также не считаю. Есть в его использовании удобства и плюсы (https://habr.com/ru/post/39231/).
На счёт foreach. Иногда лучше использовать linq, а иногда foreach.Вот с этим согласен.