Telegram Group Search
💡 JetBrains выпустила релиз-кандидат ReSharper 2025.1, предлагающий поддержку .NET 10 Preview и C# 14, улучшенные инспекции кода, новые рефакторинги и значительные улучшения производительности.

Ключевые обновления:
Поддержка C# 14 Preview: Включает nameof для необобщенных типов, первоклассные преобразования Span<T> и упрощенные параметры лямбда-выражений с модификаторами.

Новые инспекции кода:
Обнаружение потенциальных проблем, таких как небезопасное использование CancellationToken, неточные чтения потоков, избыточный код в условных операторах и ненужные вызовы .ToString() для перечислений.

Улучшения рефакторинга и форматирования: Возможность переключения <ImplicitUsings> во всем проекте, обновленный рефакторинг параметров с поддержкой кортежей, записей и асинхронных методов, а также новые опции форматирования, включая "chop formatting" и улучшенную обертку комментариев.

Производительность: Новая система интернирования строк снижает использование памяти вдвое, а поддержка Blazor и Razor переработана для более быстрой и стабильной работы, особенно в проектах ASP.NET с большим количеством компонентов.

Поддержка C++ и разработка игр: Включает рефакторинг Inline Macro, поддержку новых расширений GNU, уменьшенное использование памяти для крупных проектов на Unreal Engine и обновленный Clang-Tidy с улучшенной поддержкой GoogleTest.

Интеграция с Unity: Новый плагин для ReSharper предоставляет автодополнение для функций событий Unity и файлов ShaderLab, улучшенную обработку файлов .meta и распознавание неявных использований в префабах и сценах.

Расширение Qodana Team Code Quality: Позволяет интегрировать проекты Qodana Cloud или самохостингованные проекты Qodana в Visual Studio для выявления проблем с кодом, ошибок и уязвимостей непосредственно в IDE.

Для более подробной информации и загрузки релиз-кандидата посетите официальный блог JetBrains.

📌 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 .NET 10 Preview 3 уже доступен!
Новая версия приносит мощное обновление для C# — Extension Members:


💡 Теперь можно добавлять в static class расширения не только методов, но и:

🔹 Статические методы
🔹 Инстанс-свойства
🔹 Статические свойства

📦 Это значит, что вы можете "расширять" поведение типов не только логикой, но и дополнительными данными и даже стейтфул-логикой (через свойства).
И всё это — без изменения исходного класса.

🔗 Подробнее:
https://github.com/dotnet/core/blob/main/release-notes/10.0/preview/preview3/csharp.md#extension-members

#dotnet #csharp #dotnet10 #devtools #preview

@csharp_ci
🔧 Задача на C# для внимательных разработчиков

Что выведет следующий код?


using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
var actions = new List<Action>();

for (int i = 0; i < 3; i++)
{
actions.Add(() => Console.WriteLine(i));
}

foreach (var action in actions)
action();
}
}


Варианты ответа:
A)

1
2


B)

3
3


C)

0
0


D)Ошибка компиляции


---

Правильный ответ: B

Почему:
Лямбда-функции захватывают переменную
i по ссылке, а не её значение на каждой итерации. После завершения цикла i == 3, и все замыкания ссылаются на одно и то же i. Это классическая ловушка замыканий в C#.

@csharp_ci
🚀 Релиз: SQL Formatting Preview в T-SQL Analyzer CLI​

В последнем обновлении инструмента T-SQL Analyzer CLI от ErikEJ появилась функция предварительного просмотра форматирования SQL-кода.​

Основные возможности:
Автоматическое форматирование T-SQL скриптов с использованием встроенных правил.​

Интеграция с анализатором кода, позволяющая одновременно проверять и форматировать скрипты.​

Поддержка командной строки, что удобно для автоматизации процессов и интеграции в CI/CD пайплайны.​

🔧 Пример использования:

tsqlanalyze -i "C:\scripts\proc.sql" --format
Эта команда проанализирует и отформатирует указанный SQL-скрипт согласно установленным правилам.​

📌 Подробнее о новых возможностях и инструкциях по установке читайте в официальной документации.​

#sqlserver #tsql #dotnet #cli #devtools

https://github.com/ErikEJ/SqlServer.Rules/tree/master/tools/SqlAnalyzerCli#sql-formatting-preview

@csharp_ci
🖼 ImageSharp — мощная библиотека для обработки изображений на C# (.NET)

Поддержка форматов PNG, JPEG, GIF, BMP и др.
✂️ Масштабирование и обрезка изображений
🎨 Фильтры и визуальные эффекты
🌀 Работа с анимированными GIF
🚀 Высокая производительность без лишних зависимостей

📌 Полностью написана на C# и легко интегрируется в любые .NET-проекты.
Идеальный инструмент для тех, кто хочет быстро и качественно работать с изображениями.

🔗 GitHub

@csharp_ci
💡 Задача: Загадочный Кэш

У тебя есть метод, который возвращает последовательность чисел, вычисляемую с задержкой (например, чтение из удалённого ресурса):


public static IEnumerable<int> GetSlowData()
{
Console.WriteLine("Fetching data...");
yield return 1;
Thread.Sleep(1000);
yield return 2;
Thread.Sleep(1000);
yield return 3;
}

Теперь тебе нужно реализовать метод ProcessData(), который:

Вызывает GetSlowData() один раз.

Проходит по данным дважды: сначала фильтрует только чётные, потом считает сумму всех.

Не должен повторно "запрашивать" данные (то есть Fetching data... должен выводиться один раз).

Не должен использовать ToList(), ToArray() или другие методы, загружающие всё в память явно.

🧠 Вопрос с подвохом: Как реализовать ProcessData()?
Напиши реализацию:


public static void ProcessData()
{
// твой код здесь
}


🔎 Подсказка
Если ты просто используешь IEnumerable<int> и дважды к нему обращаешься — будет два запроса. Но есть один способ реализовать ленивое кэширование, не загружая всё в память сразу и не повторяя yield return.

Решение:

Если ты просто напишешь вот так:

```csharp
var data = GetSlowData();

var evens = data.Where(x => x % 2 == 0);
var sum = data.Sum();```

то GetSlowData() будет вызван дважды, потому что IEnumerable ленивый — и при каждом новом foreach начинается всё заново. Это видно по двойному выводу Fetching data....

🧠 Цель: пройтись по данным один раз, кэшируя элементы "на лету", и позволить другим перечислениям работать без повторного получения.
Решение: Используем ленивый кеш — с помощью кастомного итератора

```csharp
public static void ProcessData()
{
var cached = new MemoizedEnumerable<int>(GetSlowData());

var evens = cached.Where(x => x % 2 == 0);
var sum = cached.Sum();

Console.WriteLine("Even numbers: " + string.Join(", ", evens));
Console.WriteLine("Sum: " + sum);
}```
А вот реализация ленивого кеширующего MemoizedEnumerable<T>:

```csharp
public class MemoizedEnumerable<T> : IEnumerable<T>
{
private readonly IEnumerator<T> _source;
private readonly List<T> _cache = new();
private bool _sourceFinished = false;

public MemoizedEnumerable(IEnumerable<T> source)
{
_source = source.GetEnumerator();
}

public IEnumerator<T> GetEnumerator()
{
int index = 0;
while (true)
{
if (index < _cache.Count)
{
yield return _cache[index];
}
else
{
if (_sourceFinished || !_source.MoveNext())
{
_sourceFinished = true;
yield break;
}

_cache.Add(_source.Current);
yield return _source.Current;
}
index++;
}
}

IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}```

🧪 Что происходит
MemoizedEnumerable запоминает каждый элемент один раз при первом проходе.

Следующие проходы используют кэш.

Fetching data... будет вызван только один раз.

💥 Подвох
Большинство подумает, что IEnumerable можно безопасно переиспользовать без сайд-эффектов. Но не тут-то было: без кэширования yield выполнится дважды. Многие Middle+ разработчики ошибаются именно тут.
Что выведет следующий код на C#?


using System;

class Program {
static void Main() {
int a = 1000;
int b = 1000;

object x = a;
object y = b;

Console.WriteLine(x == y); // #1
Console.WriteLine(x.Equals(y)); // #2
}
}


🔢 Варианты ответа:

A)

True


B)

False


C)

True


D)

False


Правильный ответ: C

💡 Почему?

-
x и y — boxed значения типа int, то есть ссылки на два разных объекта в куче.
-
x == y сравнивает ссылки, а не значения → False.
-
x.Equals(y) вызывает метод Equals для int, который сравнивает значения → True.

📌 Подвох — в различии
== и .Equals() при использовании упакованных типов.

@csharp_ci
🖥 TinyHelpers — это библиотека, разработанная Марко Минервой, которая содержит коллекцию часто используемых вспомогательных методов и классов для .NET! Цель проекта — избежать дублирования кода, предоставляя разработчикам готовые решения для повседневных задач.

🔐 Лицензия: MIT

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Реальные проекты и нетворкинг с профи: Летняя школа бэкенд‑разработки Яндекса открыла набор

Начинающие бэкендеры, есть планы на лето? Если уже умеете писать читаемый код в Python, Java или C++ и разбираетесь в алгоритмах, Летняя школа бэкенда Яндекса — ваш шанс прокачаться в разработке высоконагруженных сервисов. Вы получите уникальный опыт, работая вместе с ведущими специалистами компании.

Как проходит обучение:
со 2 июня по 27 июля — онлайн-лекции, семинары и практические задания
с 28 июля по 24 августа — разработка реальных проектов офлайн или онлайн

Вас ждут:
— работа в фулстек-командах в коворкингах Яндекса
— лекции от специалистов компании в летнем лектории
возможность стать частью команды и получить офер: больше половины выпускников становятся стажерами или сотрудниками компании

Школа бесплатная, но нужно пройти отбор. Отправляй заявку до 27 апреля!
🖥 Wexflow — это мощная платформа для автоматизации рабочих процессов с открытым исходным кодом. Она позволяет автоматизировать задачи, такие как обработка файлов, отправка уведомлений, резервное копирование, интеграция с различными API и многое другое

🌟 Wexflow обладает рядом функций, включая интеграцию с базами данных и облачными сервисами, поддержку различных форматов данных и протоколов, а также собственным приложением для Android!

🔐 Лицензия: MIT

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
✔️ Задача. Что выведет на консоль этот пример на C#?


using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
var funcs = new List<Func<int>>();

// Первая группа лямбд
for (int i = 0; i < 4; i++)
{
funcs.Add(() => i * i);
}

Console.Write("Squares: ");
foreach (var f in funcs)
Console.Write(f() + " ");

Console.WriteLine();

// Вторая группа лямбд с копией переменной
funcs.Clear();
for (int i = 0; i < 4; i++)
{
int j = i;
funcs.Add(() => j * j);
}

Console.Write("SquaresWithCopy: ");
foreach (var f in funcs)
Console.Write(f() + " ");
}
}

Ответ:
Squares: 16 16 16 16
SquaresWithCopy: 0 1 4 9

Объяснение
Первая группа лямбд
Лямбды захватывают переменную i по ссылке. К моменту, когда мы их вызываем в foreach, цикл уже завершился, поэтому i == 4. Каждая лямбда вычисляет 4 * 4 → 16.

Вторая группа лямбд
Внутри цикла для каждого значения i создаётся новая локальная переменная j, и лямбда захватывает именно её. При первой итерации j = 0, при второй j = 1 и т. д. Поэтому j * j даёт 0, 1, 4, 9 соответственно.

Такой приём (захват локальной копии переменной) позволяет избежать «одинообразного» результата и сохранить значение каждой итерации.
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️Легкий способ получать свежие обновления и следить за трендами в разработке на вашем языке. Находите свой стек и подписывайтесь:

Python: www.tg-me.com/pythonl
Linux: www.tg-me.com/linuxacademiya
Собеседования DS: www.tg-me.com/machinelearning_interview
Нерйросети www.tg-me.com/ai_machinelearning_big_data
C++ www.tg-me.com/cpluspluc
Docker: www.tg-me.com/DevopsDocker
Хакинг: www.tg-me.com/linuxkalii
Devops: www.tg-me.com/DevOPSitsec
Data Science: www.tg-me.com/data_analysis_ml
Javascript: www.tg-me.com/javascriptv
C#: www.tg-me.com/C C Sharp programming/com.csharp_ci
Java: www.tg-me.com/javatg
Базы данных: www.tg-me.com/sqlhub
Python собеседования: www.tg-me.com/python_job_interview
Мобильная разработка: www.tg-me.com/mobdevelop
Golang: www.tg-me.com/Golang_google
React: www.tg-me.com/react_tg
Rust: www.tg-me.com/rust_code
ИИ: www.tg-me.com/vistehno
PHP: www.tg-me.com/phpshka
Android: www.tg-me.com/android_its
Frontend: www.tg-me.com/front
Big Data: www.tg-me.com/bigdatai
МАТЕМАТИКА: www.tg-me.com/data_math
Kubernets: www.tg-me.com/kubernetc
Разработка игр: https://www.tg-me.com/gamedev
Haskell: www.tg-me.com/haskell_tg
Физика: www.tg-me.com/fizmat

💼 Папка с вакансиями: www.tg-me.com/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: www.tg-me.com/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: www.tg-me.com/addlist/eEPya-HF6mkxMGIy
Папка ML: https://www.tg-me.com/addlist/2Ls-snqEeytkMDgy
Папка FRONTEND: https://www.tg-me.com/addlist/mzMMG3RPZhY2M2Iy

😆ИТ-Мемы: www.tg-me.com/memes_prog
🇬🇧Английский: www.tg-me.com/english_forprogrammers
🧠ИИ: www.tg-me.com/vistehno

🎓954ГБ ОПЕНСОРС КУРСОВ: @courses
📕Ит-книги бесплатно: https://www.tg-me.com/addlist/BkskQciUW_FhNjEy
🚀 Silk.NET 3.0: грядущая революция в .NET-графике

Сообщество Silk.NET анонсировало работу над третьей версией своего фреймворка — амбициозным переосмыслением того, как должны работать низкоуровневые .NET-биндинги для графики и мультимедиа.

Особенность проекта всегда заключалась в кроссплатформенности и минимальных накладных расходах при работе с GPU. В 3.0 разработчики обещают переработанную систему биндингов и улучшенную интеграцию с современными .NET-стэками.

🤖 GitHub

@csharp_ci
🚀 SuperSocket высокопроизводительный фреймворк для сетевых приложений на .NET. В отличие от стандартных решений, он предлагает готовую инфраструктуру для работы с TCP, UDP и WebSocket, скрывая сложности низкоуровневых операций за простым API.

Проект имеет модульную архитектуру с поддержкой middleware и встроенной системой команд, что позволяет легко адаптировать его для разных сценариев. Интеграция с DI-контейнером .NET и кроссплатформенность делают данный инструмент универсальным выбором для современных приложений.

🤖 GitHub

@csharp_ci
2025/05/19 07:38:45
Back to Top
HTML Embed Code: