uk
Feedback
C# (C Sharp) programming

C# (C Sharp) programming

Відкрити в Telegram

По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

Показати більше

📈 Аналітичний огляд Telegram-каналу C# (C Sharp) programming

Канал C# (C Sharp) programming (@csharp_ci) у мовному сегменті Російська є активним учасником. На даний момент спільнота об'єднує 18 307 підписників, посідаючи 7 339 місце в категорії Технології та додатки та 36 883 місце у регіоні Росія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 307 підписників.

За останніми даними від 14 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -10, а за останні 24 години на -7, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 18.97%. Протягом перших 24 годин після публікації контент зазвичай збирає 7.27% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 3 472 переглядів. Протягом першої доби публікація в середньому набирає 1 331 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 0.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як .net, api, логика, архитектура, string.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ

Завдяки високій частоті оновлень (останні дані отримано 15 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

18 307
Підписники
-724 години
-27 днів
-1030 день
Архів дописів
🖥 Итак, реальный кейс: нужно записать значение каждой строки InputField в List Эти 2 варианта ниже неправильные, они не рабо
🖥 Итак, реальный кейс: нужно записать значение каждой строки InputField в List<string> Эти 2 варианта ниже неправильные, они не работают: — List = (InputField.text).ToListList = InputField.text Так как InputField.text это тип string , я не могу преобразовать его в List<string>. Что в итоге делать? ⏩Всё довольно просто, можно записать строки InputField в List<string> вот так:
string text = InputField.text;
string[] lines = text.Split(Environment.NewLine);
⏩Или, если C# так не поддерживает в Unity первый вариант, то тогда вот так:
string[] lines = text.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
⏩Вообще, если хочется получить список из массива, то:
List<string> list = lines.ToList();
Но если нет необходимости список модифицировать, лучше оставить массив. @csharp_ci

❓Чем перемещение отличается от копирования в C++? Узнайте на бесплатном практическом уроке от OTUS, где вы вместе с опытным э
❓Чем перемещение отличается от копирования в C++? Узнайте на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете: - синтаксис и подводные камни move-семантики; - отличие копирования от перемещения; - когда компилятор может сам, а когда ему нужно подсказать; - как отличить rvalue от lvalue; - как избегать лишнего копирования объектов. 👉 Зарегистрируйтесь прямо сейчас: https://otus.pw/mVqm/?erid=LjN8K6SUF ⏰ Занятие пройдёт 21 марта в 20:00 мск и будет приурочено к старту курса «Специализация C++ Developer». Доступна рассрочка на обучение! Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🖥 Найди ошибку в этом коде C# и реши задание правильно Чисто академическое задание но почему бы и нет 🙃 Вот неправильное ре
+1
🖥 Найди ошибку в этом коде C# и реши задание правильно Чисто академическое задание но почему бы и нет 🙃 Вот неправильное решение, подумай, какие в нём ошибки и напиши по красоте. ⏩Готово? Получилось? Можешь смотреть решение @csharp_ci

🖥 О использовании структур размером больше 16 байт По умолчанию, при передаче в метод/возврате из метода, экземпляры значимы
+4
🖥 О использовании структур размером больше 16 байт По умолчанию, при передаче в метод/возврате из метода, экземпляры значимых типов копируются, тогда как экземпляры ссылочных типов передаются по ссылке. В 2008 была выпущена книга «Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries». В ней рекомендовалось не использовать структуры больше 16 байт, поскольку, очевидно, структуры большего размера копируются медленнее. Прошло уже 16 лет, но в сообществе C# разработчиков до сих пор популярно мнение, что производительность структур размером больше 16 байт хуже. Даже Google на запрос «recommended structure size c#» говорит, что это не более 16 байт. Код бенчмарка очень прост. Он содержит структуры и классы размером от 4 до 160 байт, с шагом 4 байта. Для каждой структуры и класса есть соответствующий метод, который из параметра типа int cоздаёт соответствующий экземпляр и возвращает его. И, самое главное, есть непосредственно бенчмарк методы (картинка), каждый из которых создаёт список структур или классов. Размер списка – 1000 элементов. В общем, после проведения тестов можно убедиться, что использование структур размером больше 16 байт не ухудшает производительность. Сейчас этой границей является размер 64 байта. А ты знал про это? @csharp_ci

🖥 Немного о новых фичах C# 12 ▶️В C# 12 упрощен способ создания массивов и коллекций с помощью выражения коллекций (collecti
🖥 Немного о новых фичах C# 12 ▶️В C# 12 упрощен способ создания массивов и коллекций с помощью выражения коллекций (collection expression), которые представляют унифицированный подход к созданию коллекций. Так, если раньше создание массивов выглядело так:
int[] nums1 = { 1, 2, 3, 4 };
int[] nums2 = new int[] { };   // пустой массив
Теперь можно писать так:
int[] nums1 = [ 1, 2, 3, 4 ];
int[] nums2 = [];   // пустой массив
Аналогичным образом можно использовать выражения коллекций для создания других типов коллекций:
List<int> list1 = [1, 2, 3, 4];
List<int> list2 = []; //  пустой список
Span<int> span1 = [1, 2, 3, 4];
▶️Первичные конструкторы (Primary constructors) позволяют добавлять параметры к определению класса/структуры и использовать эти параметры внутри класса/структуры:
var tom = new Person("Tom", 38);
Console.WriteLine(tom);
 
public class Person(string name, int age)
{
    public Person(string name) : this(name, 18) { }
    public string Name => name;
    public int Age => age;
 
    public override string ToString() => $"name: {name}, age: {age}";
}
Здесь для класса Person определен первичный конструктор с двумя параметрами - name и age. Эти параметры применяются для инициализации свойств Name и Age и используются в методе ToString(). За кадром для каждого параметра первичного конструктора в классе создается приватное поле, которое хранит значение параметра. Благодаря этому они могут использоваться в теле класса. Кроме первичных конструкторов класс может определять дополнительные конструкторы, как примере выше. Но эти дополнительные конструкторы должны вызывать первичный конструктор:
public Person(string name) : this(name, 18) { }
Разумеется, это не все фичи C# 12, вот подробнее: 📎 Youtube 📎 Статья в тему @csharp_ci

🔥Подборка лучших обучающих каналов для программистов. ➡️ Делитесь с коллегами и cохраняйте себе, чтобы не потерять ⚡️ Frontend Javascript академия - крупнейший js канал React - лучшие гайды и советы по работе с react Frontend - тутрориалы, уроки, гайды, код PHP Книги frontend Задачи frontend 💥 Хакинг Kali Linux Kali linux linux_kal - kali чат Информационная безопасность 🚀 Data Science Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста Data Jobs - ds вакансии Аналитик данных Data Science книги - актуальные бесплатные книги Big data #️⃣C# С# академия С# заметки — код, лучшие практики, заметки программиста c# С# задачи и тесты С# библиотека - актуальные бесплатные книги C# вакансии - работа ⚡Машинное обучение Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу Ml ru - актуальные статьи, новости, код и обучающие материалы Ml Jobs - вакансии ML ML Книги - актуальные бесплатные книги МО ML чат Machine Learning - полезные статьи новости гайды и разбор кода 🏆 Golang Golang - подробные гайды, разбор кода, лучшие практики, заметки Golang собеседование Golang вакансии Golang книги Golang задачи и тесты Golang чат Golang news - новости go 🐍 Python Python/django Python Собеседование - подготовка к собеседовению python и разбор алгоритмов Pro python - статьи, новости, код и обучающие материалы Python Jobs - вакансии Python Python чат Python книги ☕ Java Java академия Java вакансии Java чат Java вопросы с собеседований Java книги 🛢Базы данных Sql базы данных Библиотека баз данных SQL чат 💻 C++ C++ академия С++ книги C++ задачи - подготовка к собеседовению мл, алгоритмам C++ вакансии 🐧 Linux Linux academy 🦀 Rust Rust программирование Rust чат Rust книги для программистов 📲 Мобильная разработка Android разработка Мобильный разработчик гайды и уроки 🇬🇧 Английский для программистов 🧠 Искусственный интеллект ИИ и технологии Neural - нейросети для работы и жизни Книги ИИ Artificial Intelligence 🔥 DevOPs Devops для программистов Книги Devops 🌟 Docker/Kubernets Docker Kubernets 📓 Книги Библиотеки Книг для программситов 💼 Папка с вакансиями: Папка Go разработчика: Папка Python разработчика: Папка Data Science Папка Java разработчика Папка C# Папка Frontend

💎Свежайший 8-часовой ролик-курс по C# от freeCodeCamp.org Здесь разбираются самые важные понятия, очень много практики — на
+1
💎Свежайший 8-часовой ролик-курс по C# от freeCodeCamp.org Здесь разбираются самые важные понятия, очень много практики — на протяжении ролика постоянно реализуются мини-проекты А вот темы, которые затрагиваются в ролике: Обзор языка С# 🔘Структура программы на С# 🔘Основные операции ввода/вывода 🔘Рекомендации по оформлению кода Использование структурных переменных 🔘Общая система типов (Common Type System) 🔘Использование встроенных типов данных 🔘Пользовательские типы данных 🔘Преобразование типов Операторы и исключения 🔘Операторы в С# 🔘Обработка исключений Методы и параметры 🔘Использование методов 🔘Использование параметров 🔘Перегрузка методов Массивы и коллекции 🔘Массивы 🔘Списки – List<T> 🔘Двухсвязные списки – LinkedList<T> 🔘Словари – Dictionary<TKey, TValue> Основы ООП 🔘Классы и объекты 🔘Инкапсуляция данных 🔘Наследование и полиморфизм Использование ссылочных данных 🔘Reflection (рефлексия) 🔘Пространства имен 🔘Приведение типов данных Создание и удаление объектов 🔘Использование конструкторов 🔘Уничтожение объектов Наследование в C# 🔘Использование интерфейсов 🔘Использование абстрактных классов Агрегации, пространства имён, сборки и модули 🔘Использование внутренних (internal) классов, методов и данных 🔘Использование агрегаций 🔘Фабрики классов 🔘Пространства имен 🔘Модули и сборки Операции, делегаты, события 🔘Операции 🔘Создание и использование делегатов 🔘События Свойства и индексаторы 🔘Свойства 🔘Индексаторы Посмотрите хотя бы по диагонали — прокачаете свой C# 💎 Learn C# – Full Course with Mini-Projects @csharp_ci

🖥 Полезные фишки, связанные с символом @ Специальный символ @ является "буквальным" идентификатором, короче, показывает, что
🖥 Полезные фишки, связанные с символом @ Специальный символ @ является "буквальным" идентификатором, короче, показывает, что нечто нужно интерпретировать буквально. У @ масса сфер применения, его можно использовать, чтобы: ▶️указать, что строковый литерал следует интерпретировать буквально. Символ @ в этом случае определяет буквальный строковый литерал. Простые escape-последовательности (например, "\\" для обратной косой черты), шестнадцатеричные escape-последовательности (например, "\x0041" для прописной буквы A) и escape-последовательности Юникода (например, "\u0041" для прописной буквы A) интерпретируются буквально. Только escape-последовательность кавычки ("") не интерпретируется буквально. Кроме того, в случае с интерполированными последовательностями строковых фигурных фигурных скобок ({{ и }}) не интерпретируются буквально; они создают символы с одной фигурной скобкой.
string filename1 = @"c:\documents\files\u0066.txt";
string filename2 = "c:\\documents\\files\\u0066.txt";

Console.WriteLine(filename1);
Console.WriteLine(filename2);

//     c:\documents\files\u0066.txt
//     c:\documents\files\u0066.txt
string s1 = "He said, \"This is the last \u0063hance\x0021\"";
string s2 = @"He said, ""This is the last \u0063hance\x0021""";

Console.WriteLine(s1);
Console.WriteLine(s2);

//     He said, "This is the last chance!"
//     He said, "This is the last \u0063hance\x0021"
▶️@ можно использовать в качестве идентификаторов. Символ @ предшествует элементу кода, который компилятор должен интерпретировать как идентификатор, а не ключевое слово C#:
string[] @for = { "John", "James", "Joan", "Jamie" };
for (int ctr = 0; ctr < @for.Length; ctr++)
{
   Console.WriteLine($"Here is your gift, {@for[ctr]}!");
}

//     Here is your gift, John!
//     Here is your gift, James!
//     Here is your gift, Joan!
//     Here is your gift, Jamie!
▶️ну и напоследок, @ используется, чтобы позволить компилятору различать атрибуты в случае конфликта имен. @csharp_ci

Вам когда-нибудь требовалось реализовать полнофункциональный текстовый редактор в вашем приложении C#? Просто прочтите эту ин
Вам когда-нибудь требовалось реализовать полнофункциональный текстовый редактор в вашем приложении C#? Просто прочтите эту интересную статью по ссылке, где автор представляет текстовый редактор, основанный на классе RichtextBox. Исходники находятся на сервере Codeproject, мне понадобилось аж три попытки, чтобы их скачать 😲 Надеюсь, скоро автор перенесет этот полезный проект на GitHub, а пока вот ссылка 🔗Статья и проект @csharp_ci

🖥 Отличный сборник заданий и упражнений по C#, поможет освежить самые важные понятия Эти задачи (с решениями) позволят освои
+4
🖥 Отличный сборник заданий и упражнений по C#, поможет освежить самые важные понятия Эти задачи (с решениями) позволят освоить операторы и базовые конструкции языка C#, потренировать такие навыки программирования, как ввод/вывод данных, целочисленную арифметику, логику и все операторы циклов, ну и не только — есть несколько довольно сложных заданий 📁 PDF @csharp_ci

⚡Онлайн-Хакатон "Городские Легенды" от Группы компаний Росохрана и ООО «Эпсилон»! 💡Кейсы хакатона: 1. Разработка интерактивн
⚡Онлайн-Хакатон "Городские Легенды" от Группы компаний Росохрана и ООО «Эпсилон»! 💡Кейсы хакатона: 1. Разработка интерактивного голосового помощника с использованием анимированного аватара. 2. Интеграция интерактивного аватара в городскую экосистему цифровых сервисов. 👨‍💻Для кого хакатон? - C++/C#-разработчиков; - Unity-разработчиков; - 3D-Моделлеров; - UX/UI-дизайнеров; - AI-Специалистов; - Команды из 5 человек; - Готовых внедрить любимых персонажей в городскую среду и побороться за главный приз! 🏆Общий призовой фонд - 700 000 рублей! 📅Дата проведения: 11-18 Марта 📍Формат: Онлайн Подробная информация и регистрация: https://tglink.io/6c8079854982?erid=LjN8KVcPo

Что произойдет если попытаться запустить этот код?
Anonymous voting

#ПятничныйКвиз
#ПятничныйКвиз

🫵 Соберите свой первый проект на С++ и добавьте его в портфолио 👉 На бесплатном практическом уроке от OTUS и Карины Дорожки
🫵 Соберите свой первый проект на С++ и добавьте его в портфолио 👉 На бесплатном практическом уроке от OTUS и Карины Дорожкиной — ведущего разработчика в Kaspersky.  На вебинаре:- разберем понятие единицы трансляции;- проследим за ошибками компиляции и линковки, разберёмся в их причинах;- создадим статическую библиотеку и подключим её при помощи CMake;- обсудим разницу между статической библиотекой и динамической.  ⏰ Занятие пройдёт 5 марта в 20:00 мск и будет приурочено к старту курса «Специализация C++ Developer». Доступна рассрочка на обучение! 👉 Зарегистрируйтесь прямо сейчас, чтобы занять место: https://otus.pw/JPb4/?erid=LjN8KEppm Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.

🖥 Новый выпусе- Microsoft .Data.SqlClient 5.2 - с .NET 8, поддержкой пакетной обработки Sql и идентификации рабочей нагрузки
🖥 Новый выпусе- Microsoft .Data.SqlClient 5.2 - с .NET 8, поддержкой пакетной обработки Sql и идентификации рабочей нагрузки + многое другое - смотрите примечания к выпуску: 📌 Релиз #dotnet #sqlserver @csharp_ci

🖥 Интересный вопрос Что выведет данная программа? А скомпилируется ли она вообще? var str = new TheBestStructEver(5); Consol
🖥 Интересный вопрос Что выведет данная программа? А скомпилируется ли она вообще?
var str = new TheBestStructEver(5);

Console.WriteLine(str.A);

public struct TheBestStructEver
{
    public int A;

    public TheBestStructEver(int a)
    {
        A = a;
        this = new TheBestStructEver();
    }
}
❯ Ответ: да, скомпилируется, причем без всяких предупреждений, и выведет 0. Давайте разберем почему это так. Обратимся к IL-коду нашей структуры, а конкретнее к 12-ой строчке. Вот как она выглядит в IL-коде:
IL_0013: ldarg.0
IL_0014: initobj      TheBestStructEver
Итак, первая строчка загружает в стек нулевой аргумент, переданный в метод (конструктор - тоже метод). Аргумент под нулевым индексом - это указатель на объект, в котором мы работаем, то есть this. initobj инициализирует каждое поле структуры нулями или null по адресу, которое лежит у нас первым в стеке (а у нас там лежит указатель на this). Дополнительно мы еще передаем токен, который указывает тип структуры. Таким образом получается, что у нас вся структура "перезатёрлась нулями" и значение поля A равно нулю. @csharp_ci

🖥 Прямо-таки сеньорская версия FizzBuzz — функциональный код с массивом делегатов преобразований числа в Fizz &amp; Buzz. pu
🖥 Прямо-таки сеньорская версия FizzBuzz — функциональный код с массивом делегатов преобразований числа в Fizz & Buzz.
public class FizzBuzz
{
    public static void Main(string[] args)
    {
        Console.WriteLine(FizzBuzzProgram(350));
    }
    public static string FizzBuzzProgram(int n) =>
        String.Join("\r\n", 
            Enumerable.Range(1, n).Select(FizzBuzzPipeline));

    static readonly Func<int, string?>[] handlers = [(n) => n % 3 == 0 ? "Три" : null, (n) => n % 5 == 0 ? "Пять" : null];
    
    public static string FizzBuzzPipeline(int i) => Counter(i, String.Join("", handlers.Select(f => f(i))));

    public static string FizzBuzzPipelinePar(int i)
    {
        var results = handlers.AsParallel().Select(handler => handler(i)).Where(r => r != null);
        return results.Any() ? string.Concat(results) : i.ToString();
    }
}
Этот массив расширяемый - пишите хоть 100 проверок, множество других решений на такое не способно. Можно любое вычисление вычислять. А из-за независимости мы можем запускать их параллельно (если бы вычисление хендлера занимало большое время). Красота! Хотите попроще ценой потери части универсальности?
static string FizzBuzzPipelineWOHandlers(int n)
{
    string result = $"{(n % 3 == 0 ? "Fizz" : "")}{(n % 5 == 0 ? "Buzz" : "")}{(n % 7 == 0 ? "Qux" : "")}";
    return String.IsNullOrEmpty(result) ? n.ToString() : result;
}
Вдохновлено идеями Скотта Влашина, в частности, этим роликом @csharp_ci

5️⃣простых правил, которые не стоит забывать, чтобы код C# был чище и производительнее ➖Возврат null из неасинхронного метода
5️⃣простых правил, которые не стоит забывать, чтобы код C# был чище и производительнее ➖Возврат null из неасинхронного метода Task/Task<T> приведет к возникновению NullReferenceException. Этой проблемы можно избежать, вернув вместо этого Task.FromResult<T>(null)
// неправильно
public Task<object> GetFooAsync()
{
    return null; // Noncompliant
}
// правильно так
public Task<object> GetFooAsync()
{
    return Task.FromResult<object>(null);
}
➖Объединять строки в цикле лучше не через +. Лучше использовать StringBuilder как более эффективный вариант.
// можно быстрее
string str = "";
for (int i = 0; i < arrayOfStrings.Length ; ++i)
{
  str = str + arrayOfStrings[i];
}
// это быстрее
StringBuilder bld = new StringBuilder();
for (int i = 0; i < arrayOfStrings.Length; ++i)
{
  bld.Append(arrayOfStrings[i]);
}
string str = bld.ToString();
➖Для поиска подстрок вместо str.Substring(startIndex).IndexOf(char1) лучше использовать один из методов: IndexOf IndexOfAny LastIndexOf LastIndexOfAny
// так не стоит 
str.Substring(StartIndex).IndexOf(char1); // Noncompliant; a new string is going to be created by "Substring"
// более эффективный вариант 
str.IndexOf(char1, startIndex);
➖Вместо null во многих случаях лучше возвращать пустые массивы/коллекции, это делает код понятнее
// плохая идея
public Result[] GetResults()
{
    return null; // Noncompliant
}

public IEnumerable<Result> GetResults()
{
    return null; // Noncompliant
}
// так намного лучше
public Result[] GetResults()
{
    return new Result[0];
}

public IEnumerable<Result> GetResults()
{
    return Enumerable.Empty<Result>();
}
➖Если мы делим на объект типа int, то результатом всегда будет int; можно конечно привести этот результат к типу вещественного числа, но из-за проблем с плавающей запятой результат может быть не тем. В общем, лучше привести делимое к (decimal):
decimal dec = 3/2; // 1
decimal dec = (decimal)3/2; // 1.5
Не стоит забывать эти простые рекомендации, тогда код будет чище и понятее @csharp_ci

👩‍💻 TDD в разработке на С# — что, для чего, полезно ли? Расскажет Антон Герасименко — .net developer + lead. Встречаемся на
👩‍💻 TDD в разработке на С# — что, для чего, полезно ли? Расскажет Антон Герасименко — .net developer + lead. Встречаемся на бесплатном практическом уроке от OTUS, где вы вместе с опытным экспертом разберете: ✅ как короткие циклы разработки, опирающиеся на TDD (разработка через тестирование) влияют на качество продукта; ✅ как его внедрить, когда это нужно и что делать потом.  Занятие пройдёт 29 февраля в 20:00 мск и будет приурочено к старту курса «C# Developer. Professional». Доступна рассрочка на обучение! 👉 Пройдите короткий тест прямо сейчас, чтобы занять место на открытом уроке и получить запись: пройти тест  Реклама. ООО "ОТУС ОНЛАЙН-ОБРАЗОВАНИЕ". ИНН 9705100963.