Архив рубрики "C#"

Недокументированная особенность класса List<T> (2009-8-29)

Несмотря на то, что использование цикла foreach в принципе не комильфо, многие его используют. Для поклонников этого цикла и предлается следующая информация. Не секрет, что, если в теле цикла foreach Вы попытаетесь изменить коллекцию List<T>, Вы получите InvalidOperationException. Однако это происходит не всегда.

Табличный контейнер TableSplitControl (2009-6-27)

Немногим это действительно нужно, но все же я видел в сети массу запросов по поводу контрола, который бы, как стандартный TableLayoutPanel, мог являться табличным вместилищем других контролов, но, при этом, имел бы возможность изменять размеры строк и столбцов во время исполнения (в RunTime’е). Мягко говоря, таких контролов в паблике нет. Однако, я предлагаю Вашему вниманию […]

Собственная очередь событий: EventQueue<T> (2009-6-22)

В ряде задач требуется, чтобы события вызывались строго последовательно, а не каскадно, как в классической реализации. Каскадность заключается в том, что, если в обработчике какого-либо события встретится вызов другого (или того же, не принципиально) события, то, собственно, обработка первого события прервется до завершения работы обработчика второго события. Это абсолютно нормальное и всех устраивающее поведение в […]

Параллельные вычисления: класс MultiThread (2009-6-19)

Современные персональные компьютеры стали многопроцессорными (и/или многоядерными), это — факт! Пока еще не вышел .NET Framework 4.0 и C# 4.0, в котором заявлена поддержка многопоточности, и поэтому программисты, как правило, никак не используют параллельность в своих вычислительных программах. Характерно, что активно вычисляющая программа грузит процессор лишь на 50% (на 2-ядерной машине) или на 25% (на […]

PathOperations: заимствовано из VB.NET (2009-6-18)

Не знаю почему, но часть функционала, который мог бы быть полезен и пишущим на C#, досталась только одному VB.NET. По крайней мере, статические методы, приведенные мной ниже и предназначенные для работы с файловыми путями, изначально располагались в пространстве имен Microsoft.VisualBasic, а именно — в классе Microsoft.VisualBasic.FileIO.FileSystem.

Бинарное дерево Tree<T> (2009-6-14)

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

Работа с интервалами: Interval<T> (2009-6-13)

В ряде алгоритмов имеется необходимость реализации работы с различными интервалами (числовыми, строковыми, пользовательскими, любыми IComparable<T>). Для этих целей должен прекрасно подойти следующий универсальный шаблонный класс:

Типовые правила кодирования на C# (2009-6-13)

Начинающим project manager’ам, равно как и самостоятельным программистам, могут оказаться полезными приведенные (в довольно общем виде) правила кодирования на C#. На самом деле, список требований к исходному коду может составить и пару-тройку сотен пунктов, однако, для начала, попробуем ограничиться лишь небольшим набором обязательных правил (зачастую выстраданных неделями «тупежа» над кодом).

Методы Between<T> (2009-6-11)

Не секрет, что почти в каждой программе, оперирующей с числовой информацией, приходится производить проверку принадлежности различных значений допустимым интервалам. Зачастую, такие выражения в операторах сравнения имеют довольно громоздкий вид, например:

Класс Class<T1, T2, …> (2009-6-10)

Как описано в топике о структуре Pair<F, S>, зачастую требуется объединять объекты различных типов во временные структуры (или классы). Случай для двух объектов рассмотрен в предыдущем топике. Теперь рассмотрим случай большего количества объектов.