C#Hive: Projects & Progress | Программирование

Description
Сообщество единомышленников C#: решаем задачи, учимся, развиваемся и общаемся вместе. Советы по работе на фрилансе, готовые проекты, код ревью, рекомендации и исследования.

Вопросы/сотрудничество: @tel_phil9
Advertising
We recommend to visit

Официальный новостной канал криптобиржи OKX | www.okx.com на русском языке.

? Комьюнити: t.me/okx_russian

?‍? Поддержка: [email protected]

АДМИН: @DaniiOKX
Маркетинг: @CoffeeTrends

Last updated 2 weeks, 2 days ago

Здесь простым языком про TON, DFC и крипту.

Принимаем автоматически.
Ссылка для друзей: https://t.me/+-EOfWx2pRKhmNGE6
Связь: @deftalk_bot

Last updated 1 month ago

#1 канал о блокчейне, криптовалютах и децентрализованных финансах.

🔥 Реклама — @DCTeam

Last updated 1 day, 6 hours ago

2 months ago

? Unsafe code: указатели на структуры, члены классов и массивы

Продолжаем разбор предыдущей темы.

➡️ Указатели на типы и операция ->
Кроме указателей на простые типы можно использовать указатели на структуры. А для доступа к полям структуры, на которую указывает указатель, используется операция ->:

```
unsafe
{
Point point = new Point(0, 0);
Point* p = &point;

p\->X = 30; Console.WriteLine(p\->X); // 30 (*p).Y = 100; Console.WriteLine((*p).Y); // 100 Console.WriteLine(point); // X: 30 Y: 100

}

struct Point
{
public int X { get; set; }
public int Y { get; set; }

public Point(int x, int y) { X = x; Y = y; } public override string ToString() => $"X: {X} Y: {Y}";

}
```

Обратите внимание, что просто написать p.X = 30 мы не можем, так как p — это не структура Point, а указатель на структуру. Альтернативой служит операция разыменования (*p).X = 30.

Стоит отметить, что указатель может указывать только на те структуры, которые не имеют полей ссылочных типов (в том числе полей, которые генерируются компилятором автоматически для автосвойств).

➡️ Указатели на массивы и stackalloc
С помощью ключевого слова stackalloc можно выделить память под массив в стеке. Смысл выделения памяти в стеке в повышении быстродействия кода. Посмотрим на примере вычисления квадратов чисел:

```
unsafe
{
const int size = 7;
int square = stackalloc int[size]; // Выделяем память в стеке под семь объектов int
int
p = square;

// Считаем квадрат числа for (int i = 1; i <= size; i++, p++) *p = i * i; for (int i = 0; i < size; i++) Console.WriteLine(square[i]);

}
```

Оператор stackalloc принимает после себя массив, на который будет указывать указатель.

Для манипуляций с массивом создаем указатель int* p = square, который указывает на первый элемент массива, в котором всего 7 элементов. С помощью указателя p мы сможем перемещаться по массиву square (этакий индексатор).

Далее в цикле происходит подсчёт квадратов чисел от 1 до 7. В цикле для установки значения по адресу, который хранит указатель, выполняется выражение *p = i * i.

Затем происходит инкремент указателя p++, и указатель p смещается вперёд на следующий элемент в массиве square.

➡️ Оператор fixed и закрепление указателей
Кроме структур есть ещё и классы, которые помещают все связанные значения в куче. В работу данных классов может в любой момент вмешаться сборщик мусора, периодически очищающий кучу. Дабы фиксировать на всё время работы указатели на объекты классов используется оператор fixed.

Допустим, у нас есть класс Point:

```
class Point
{
public int x;
public int y;

public override string ToString() => $"x: {x} y: {y}";

}
```

Зафиксируем указатель с помощью оператора fixed:

```
unsafe
{
Point point = new Point();

fixed (int* pX = &point.x) *pX = 30; fixed (int* pY = &point.y) *pY = 150; // Можно совместить оба блока /*fixed (int* pX = &point.x, pY = &point.y) { *pX = 30; *pY = 150; }*/ Console.WriteLine(point); // x: 30 y: 150

}
```

Оператор fixed создаёт блок, в котором фиксируется указатель на поле объекта person. После завершения блока fixed закрепление с переменных снимается и они могут быть подвержены сборке мусора.

Кроме адреса переменной можно также инициализировать указатель, используя массив, строку или буфер фиксированного размера:

```
unsafe
{
int[] nums = { 0, 1, 2, 3, 7, 8 };
string str = "Привет мир";

fixed (int* p = nums) { int num = *(p + 2); // Получим третий элемент Console.WriteLine(num); // 2 } fixed (char* p = str) { char sym = *(p + 3); // Получим четвёртый элемент Console.WriteLine(sym); // в }

}
```

При инициализации указателей на строку следует учитывать, что указатель должен иметь тип char*.

#Полезно #Unsafe #Pointers

2 months ago

Решение задачи к посту.

```
void CharacterFrequencyAnalyzer(string text)
{
var chars = text.ToLower()
.GroupBy(q => q)
.Select(q => new { Sym = q.Key, Count = q.Count() })
.OrderByDescending(q => q.Count);

foreach (var c in chars) Console.WriteLine($"'{c.Sym}': {c.Count}");

}
```

#Задача #Решение #Полезно #LINQ

2 months ago

? Задача: анализ частоты символов (*⭐️*)

Написать метод, который принимает строку, анализирует частоту появления каждого символа в этой строке, сортирует по убыванию частоты и выводит результат на экран. Ниже приведены примеры.

CharacterFrequencyAnalyzer("Привет, мир! Как дела?");

? ' ': 3
? 'р': 2
? 'и': 2
? 'е': 2
? 'к': 2
? 'а': 2
? 'п': 1
? 'в': 1
? 'т': 1
? ',': 1
? 'м': 1
? '!': 1
? 'д': 1
? 'л': 1
? '?': 1

CharacterFrequencyAnalyzer("Сообщение");

? 'о': 2
? 'е': 2
? 'с': 1
? 'б': 1
? 'щ': 1
? 'н': 1
? 'и': 1

CharacterFrequencyAnalyzer("IRON MAN");

? 'n': 2
? 'i': 1
? 'r': 1
? 'o': 1
? ' ': 1
? 'm': 1
? 'a': 1

CharacterFrequencyAnalyzer("Character");

? 'c': 2
? 'a': 2
? 'r': 2
? 'h': 1
? 't': 1
? 'e': 1

Пишите варианты в комментариях. Решение будет сегодня вечером новым постом в канале.

#Задача #Lvl1

4 months, 2 weeks ago
***?*** **Обзор** [**ASP.NET**](http://ASP.NET/)**: что это, как …

? Обзор ASP.NET: что это, как работает и зачем нужно

ASP.NET (далее ASPN) — это бесплатная веб-платформа для создания веб-сайтов и веб-приложений с помощью HTML, CSS и JavaScript. Также можно создавать веб-API и использовать технологии в режиме реального времени, такие как веб-сокеты.
ASPN Core является альтернативой ASPN. Основное различие заключается в их кроссплатформенном подходе.

ASPN предлагает три платформы для создания веб-приложений: веб-формы, MVC и веб-страницы. Все три платформы являются стабильными и зрелыми, и можно создавать отличные веб-приложения с помощью любой из них.

Каждая платформа предназначена для разных стилей разработки. Выбор зависит от сочетания ресурсов программирования (знаний, навыков и опыта разработки), типа создаваемого приложения и удобного подхода к разработке. Ниже приведён обзор каждой платформы и некоторые идеи по выбору между ними.

➡️ Веб-формы
Полные сведения о веб-формах.

Стиль разработки:
Быстрая разработка с использованием богатой библиотеки элементов управления, которые инкапсулируют разметку HTML.
Если есть опыт работы с:
Win Forms, WPF, .NET.

➡️ MVC
Полные сведения о MVC.

Стиль разработки:
Полный контроль над разметкой HTML, разделённым кодом и разметкой, а также простой в написании тестов. Оптимальный вариант для мобильных и одностраничных приложений (SPA).
Если есть опыт работы с:
Ruby on Rails, .NET.

➡️ Веб-страницы ASPN
Полные сведения о веб-страницах.

Стиль разработки:
Разметка HTML и код вместе в одном файле.
Если есть опыт работы с:
Классический ASP, PHP.

Рекомендую ознакомиться с полной документацией по обзору, у кого ещё остались вопросы.

#Полезно #ASP

4 months, 2 weeks ago
4 months, 3 weeks ago

Решение задачи к посту.

int ArithmeticProgression(int firstElem, int dif, int n) => firstElem + (n \- 1) * dif;

#Задача #Решение #Полезно

4 months, 3 weeks ago

? Задача: N-й элемент арифметической прогрессии (*⭐️*)

Написать метод, который находит N-й элемент арифметической прогрессии. Функция принимает первый элемент прогрессии, шаг (разность) прогрессии и порядковый номер элемента, который нужно вернуть. Ниже приведены примеры.

ArithmeticProgression(firstElem: 5, dif: 3, n: 5)

? 17

ArithmeticProgression(firstElem: 10, dif: \-5, n: 7)

? -20

ArithmeticProgression(firstElem: 1999, dif: 101, n: 3)

? 2201

ArithmeticProgression(firstElem: 1, dif: 1, n: 10)

? 10

Пишите варианты в комментариях. Решение будет сегодня вечером новым постом в канале.

#Задача #Lvl1

4 months, 3 weeks ago

? Обогащаемся знаниями!

#Дайджест полезного материала за последнее время.

Фриланс советы:
Роль отзывов
Зарабатывай больше, делая меньше
Задачи:
Обмен max и min
Исключение средней цифры
Добавление средней цифры
Гипотеза Коллатца
Самый большой крайний
Выборка до последнего максимального
Строка может быть палиндромом
Загадка чисел Лишрел
Процент скидки/прироста
Подсчёт

Опросы — что будет выведено на экран:
№1
№2
№3
№4
№5
№6
№7
№8
№9
№10

Полезное:
Веб-драйвер Selenium для парсинга
Собственные операторы класса/структуры
Сравнение строк из коллекции без учёта регистра
Pattern matching для упрощения сопоставления
Разница числовых типов с плавающей запятой
Лицензирование программного обеспечения
Разбор порождающего паттерна Factory
Удобство и польза от кортежей (Tuple)
Генерация класса по JSON/XML структуре
Асинхронные методы (async и await)
Сравнение строк без учёта регистра
Метод Zip от LINQ
Метод GroupBy от LINQ и оператор group by
Основные типы исключений
Решения повседневных задач при работе с числами
Метод Union от LINQ
Для чего существует GetHashCode()
Методы Except и Intersect от LINQ
Потокобезопасная коллекция
Цепочка ответов в Telegram боте

Самые важные хэштеги:
#Фриланс #Полезно #Задача #Опрос #LINQ #Проект

4 months, 4 weeks ago
5 months ago

Наверное самым популярным каналом по поиску работы за рубежом за последние пару лет стал LinkedIn. Почему так?

Во-первых, потому что сама платформа предназначена для того, чтобы обрастать профессиональными знакомствами, это буквально прописано у них в правилах.

А во-вторых, если тебе актуальна работа в Европе, MENA или США, проще всего найти ее именно через LinkedIn. Кстати, наши рекрутеры за последний год тоже стали активно подтягиваться к этой соцсети.

И в третьих, — правда пока у нас это направление не так популярно как на западе — LinkedIn можно использовать для прокачки личного бренда и продажи услуг типа консалтинга или менторинга. И отделять свою профессиональную активность от "личных" соцсетей.

Единственное, в чем у многих возникает сложность — как этой штукой верно пользоваться: как оформить, что публиковать, как искать вакансии и выходить на работодателей. Потому что прямо скажем — LinkedIn не все понятен в плане юзабилити и имеет длительный порог входа, чтобы разобраться во всех тонкостях?
Но факт остается фактом — это мощный инструмент, потому что им пользуются по всему миру. Причем не только айтишники (есть даже вакансии для пилотов, например?)

Как этим всем пользоваться, что такое SSI  и многое другое подробно рассказывает Александр Лепешкин в своем канале LinkedIn & Career | Alex Lepeshkin

Саша специализируется на прокачке LinkedIn и проводит вебинары и тренинги на эту тему. Присоединяйтесь, не пожалеете)

We recommend to visit

Официальный новостной канал криптобиржи OKX | www.okx.com на русском языке.

? Комьюнити: t.me/okx_russian

?‍? Поддержка: [email protected]

АДМИН: @DaniiOKX
Маркетинг: @CoffeeTrends

Last updated 2 weeks, 2 days ago

Здесь простым языком про TON, DFC и крипту.

Принимаем автоматически.
Ссылка для друзей: https://t.me/+-EOfWx2pRKhmNGE6
Связь: @deftalk_bot

Last updated 1 month ago

#1 канал о блокчейне, криптовалютах и децентрализованных финансах.

🔥 Реклама — @DCTeam

Last updated 1 day, 6 hours ago