C# (C Sharp) programming
По всем вопросам- @notxxx1 Реестр РКН: https://clck.ru/3Fk3kb #VRHSZ
Show more📈 Analytical overview of Telegram channel C# (C Sharp) programming
Channel C# (C Sharp) programming (@csharp_ci) in the Russian language segment is an active participant. Currently, the community unites 18 139 subscribers, ranking 7 059 in the Technologies & Applications category and 36 427 in the Russia region.
📊 Audience metrics and dynamics
Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 18 139 subscribers.
According to the latest data from 02 September, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -42 over the last 30 days and by 0 over the last 24 hours, overall reach remains high.
- Verification status: Not verified
- Engagement rate (ER): The average audience engagement rate is 13.64%. Within the first 24 hours after publication, content typically collects 7.27% reactions from the total number of subscribers.
- Post reach: On average, each post receives 2 475 views. Within the first day, a publication typically gains 1 319 views.
- Reactions and interaction: The audience actively supports content: the average number of reactions per post is 0.
- Thematic interests: Content is focused on key topics such as .net, api, логика, архитектура, string.
📝 Description and content policy
The author describes the resource as a platform for expressing subjective opinions:
“По всем вопросам- @notxxx1
Реестр РКН: https://clck.ru/3Fk3kb
#VRHSZ”
Thanks to the high frequency of updates (latest data received on 03 September, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.
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_cipublic 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_cinull из неасинхронного метода 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
.NET 8, включая примеры того, как сделать нативный AOT в ASP NET.
Этот проект предоставляет рабочий скелет для работы с AWS Lambda на .NET, включая развертывание с помощью AWS CDK и конвейер GitHub Actions.
▪Github
@csharp_ciTask_WhenAll, чтобы добиться значительного повышения производительности.
Это может сделать ваш API в 15 раз быстрее:
▪Читать дальше
▪Последовательное и параллельное выполнение. Task.WhenAll и Task.WhenAny
@csharp_ci