C# (C Sharp) programming
18.7K subscribers
756 photos
38 videos
8 files
675 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
🖥 Lists & enumerables

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

Суммирование всех чисел в диапазоне:

using System;
using System.Linq;

public class Program {
public static void Main() {
Console.WriteLine(Enumerable.Range(1, 100).Sum());
}
}

Применение функции ко всем числам в списке:

using System;
using System.Linq;

public class Program {
private static int Square(int n) => n * n;

public static void Main() {
int[] arr = { 1, 2, 3, 4 };

// direct anonymous function
int[] arr2 = arr.Select(n => n * n).ToArray();
// using another method
int[] arr3 = arr.Select(Square).ToArray();

foreach (int n in arr2)
Console.WriteLine(n); // output: 1, 4, 9, 16
foreach (int n in arr3)
Console.WriteLine(n); // output: 1, 4, 9, 16
}
}


Фильтрация списка номеров:

using System;
using System.Linq;

public class Program {
private static bool IsValid(int n) => n % 2 == 0 && n > 4;

public static void Main() {
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

// direct anonymous function
int[] arr2 = arr.Where(n => n % 2 == 0 && n > 4).ToArray();
// using another method
int[] arr3 = arr.Where(IsValid).ToArray();

foreach (int n in arr2)
Console.WriteLine(n); // output: 6, 8
foreach (int n in arr3)
Console.WriteLine(n); // output: 6, 8
}
}


Нахождение минимального/максимального значения в списке:

using System;
using System.Linq;

public class Program {
public static void Main() {
int[] arr = { 4, 7, 2, 1, 3, 6, 9, 8, 0, 5 };
Console.WriteLine(Enumerable.Min(arr)); // output: 0
Console.WriteLine(Enumerable.Max(arr)); // output: 9
}
}

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
⚜️ArchUnitNET

ArchUnitNET - это бесплатная, простая библиотека для проверки архитектуры кода на C#. ArchUnitNET это форк https://www.archunit.org/ для Java.

PS> Install-Package ArchUnitNET

Github
Документация

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Задача. Слияние двух бинарных деревьев

Сложность: Лёгкая

Условие задачи: Даны два бинарных дерева, необходимо осуществить их наложение друг на друга и вывод результатов в новом дереве.

Примечание: Наложение представляет из себя суммирование соответствующих значений из узлов двух деревьев.

Пример:

Ввод:
root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
Вывод:
[3,4,5,5,4,null,7]

Ввод:
root1 = [1], root2 = [1,2]
Вывод:
[2,2]

* Определение для узла двоичного дерева.
* public class TreeNode {
* public int val;
* public TreeNode left;
* public TreeNode right;
* public TreeNode(int val=0, TreeNode left=null, TreeNode right=null) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
public class Solution {
public TreeNode MergeTrees(TreeNode root1, TreeNode root2)
{
if (root1 == null & root2 == null) return null;
if (root1 == null) return root2;
if (root2 == null) return root1;

var left = MergeTrees(root1.left, root2.left);
var right = MergeTrees(root1.right, root2.right);

if (root1.left != left) root1.left = left;
if (root1.right != right) root1.right = right;

root1.val += root2.val;

return root1;
}
}


Пишите свое мнение в комментариях👇

@csharp_ci
🔎 Полное руководство по созданию приложения-клона Google Translate с нуля на .NET

Добрый день! Я действительно взволнован проектом, который мне удалось создать для вас. Я сделал всё возможное, чтобы представить вам что-то с почти полной функциональностью, что-то, что вы можете продемонстрировать в своём портфолио, если вы новичок, и не волнуйтесь, дальше я начну создавать проекты для разработчиков среднего и продвинутого уровня, просто имейте немного терпения, пока я сосредоточен на новых разработчиках .NET.

Сегодняшний проект является клоном приложения Google Translate с использованием Google translate API v2. Я эстет, поэтому я представлю вам красивое приложение, однако оно будет не только «красивым», но также будет переводить текст, определять язык на основе пользовательского ввода, отображать поддерживаемые языки и менять местами пользовательский ввод с результатом перевода. Так что, если вы так же взволнованы, как и я, давайте сделаем это!

Статья
Полный код

@csharp_ci
📌 10 наиболее часто задаваемых технических вопросов на собеседованиях по C#

Как разработчику C#, вам, вероятно, не привыкать нервничать перед собеседованием. Но не волнуйтесь. Мы вам поможем! В этой статье мы обсудим 10 наиболее часто задаваемых технических вопросов на собеседованиях по C# и покажем, как на них отвечать.

Читать

@csharp_ci
C# для профессионалов: тонкости программирования
Автор: Джон Скит

Книга расскажет о сложных областях и темных закоулках языка, которые может предоставить только эксперт Джон Скит.
#c_Sharp

📚 Книга

@csharp_ci
💡 Clean Architecture

Отправная точка для чистой архитектуры с ASP.NET Core.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Mockaco

HTTP mock-сервер, полезный для создания заглушек сервисов и имитации ответов API, использующий возможности ASP.NET Core, встроенную генерацию фальшивых данных.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Что вывдет код?

@csharp_ci
🧬Orleans

Orleans - это кросс-платформенная платформа для создания надежных, масштабируемых распределенных приложений

🖥 Github
📄Документация

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача "Самый короткий мост"

Условие: на вход подается матрица, в которой 1 - суша, 0 - вода.

Остров представляет из себя совокупность частей суши, соединенных в четырех направлениях. На решетке существуют только два острова.

Можно изменить 0 на 1 для соединения двух островов в один.

Необходимо посчитать количество смен нулей на единицу для соединения двух островов.

Пример:

Ввод: grid = [[0,1],[1,0]]
Вывод: 1

Объяснение:

Ввод: grid = [[0,1,0],[0,0,0],[0,0,1]]
Вывод: 2

Решенние:

public class Solution {
public IList<int> SpiralOrder(int[][] matrix) {
List<int> lst = new();
int m = matrix.Length;
int n = matrix[0].Length;
int max = (int)Math.Ceiling(Math.Min(m,n)/2.0);
for(int index=0; index< max; index++){
if(m - index * 2 == 1 || n - index * 2 == 1) {
for(int i=index; i<m-index; i++)
for(int j= index; j<n-index; j++)
lst.Add(matrix[i][j]);
continue;
}

for(int i=index; i<n-index-1; i++)
lst.Add(matrix[index][i]);
for(int i=index;i<m-index-1; i++)
lst.Add(matrix[i][n-1-index]);
for(int i=n-1-index; i>index; i--)
lst.Add(matrix[m-1-index][i]);
for(int i=m-1-index; i>index; i--)
lst.Add(matrix[i][index]);
}

return lst;
}
}

Временная сложность:
O(mn)

Пространственная сложность:
O(nm)

Пишите свое мнение в комментариях👇

@csharp_ci
🧬CefSharp

CefSharp - библиотека, которая позволяет встраивать Chromium в приложения .NET. Это легкая обертка .NET вокруг Chromium Embedded Framework (CEF) Маршалла А. Гринблатта. Около 30% связки написано на C++/CLI, а большая часть кода - на C#. Его можно использовать из C# или VB, или любого другого языка CLR.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Сортировочный список

Условие: дан односвязный список, необходимо отсортировать узлы списка по значению в порядке возрастания

Пример:

Ввод:
head = [4,2,1,3]
Вывод: [1,2,3,4]

Ввод: head = [-1,5,3,4,0]
Вывод: [-1,0,3,4,5]

Можете ли вы отсортировать связанный список за O (n logn) времени и O(1) памяти (т.е. постоянного пространства)?

Решение:

public class Solution
{
public ListNode SortList(ListNode head)
{
if (head == null)
return null;

if (head.next == null)
return head;

var tail = head;
var mid = head;
var prev = head;

while (tail != null && tail.next != null)
{
tail = tail.next.next;
prev = mid;
mid = mid.next;
}
prev.next = null;

return MergeTwoLists(SortList(head), SortList(mid));
}

ListNode MergeTwoLists(ListNode list1, ListNode list2)
{
var head = new ListNode();
var newNode = head;

while (list1 != null && list2 != null)
{
if (list1.val < list2.val)
{
newNode.next = list1;
newNode = list1;
list1 = list1.next;
}
else
{
newNode.next = list2;
newNode = list2;
list2 = list2.next;
}
}

newNode.next = list1 ?? list2;

return head.next;
}
}

пишите свое решение в комментариях 👇

@csharp_ci
📎Plugin.Maui.ScreenSecurity

Полезная библиотека для защиты приложений NET MAUI без особых усилий. Помогает скрыть контент приложения, поставить защиту от скриншотов и записи экрана.

🖥 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Threading: Небольшая памятка с кодом.

Создание нового потока
Чтобы создать новый поток в C#, вы можете использовать класс Thread:

using System.Threading;

void PrintNumbers()
{
for (int i = 1; i <= 5; i++)
{
Console.WriteLine(i);
}
}

Thread newThread = new Thread(PrintNumbers);

Starting a Thread
Чтобы запустить поток в C#, вы можете использовать метод Start():

newThread.Start();

Joining a Thread
Чтобы дождаться завершения выполнения потока в C#, вы можете использовать метод Join()

newThread.Join();


Thread Sleep
Остановка текущего потока на заданное время,

Thread.Sleep(1000); // Sleep for 1 second

Thread Pools
Чтобы использовать пул потоков в C#, вы можете воспользоваться классом ThreadPool:

using System.Threading;

ThreadPool.QueueUserWorkItem(PrintNumbers);

Tasks
Чтобы создать и запустить задачу в C#, вы можете использовать класс Task:

using System.Threading.Tasks;

Task.Run(PrintNumbers);

Wait
Чтобы дождаться завершения задачи в C#, вы можете использовать метод Wait():

Task task = Task.Run(PrintNumbers);
task.Wait();


Cancelling a Task
Для отмены задачи в C# можно использовать класс CancellationTokenSource:

using System.Threading;
using System.Threading.Tasks;

CancellationTokenSource cts = new CancellationTokenSource();
Task.Run(() => PrintNumbers(cts.Token), cts.Token);
cts.Cancel();


Task Exceptions
Для обработки исключений в задаче можно использовать блок try-catch внутри :

using System.Threading.Tasks;

Task.Run(() =>
{
try
{
// Code that may throw an exception
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
});


@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
💡Задача: Быки и коровы

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

Быки - правильные цифры, находящиеся на нужных позициях.

Коровы - правильные числа, но находящиеся на соответствующих позициях.

Задача - выдать подсказку в формате "xAyB", где x - количество быков, y - количество коров.

Пример:

Ввод:
secret = "1807", guess = "7810"
Вывод: "1A3B"

Объяснение:

Ввод:
secret = "1123", guess = "0111"
Вывод: "1A1B"

Решение:

public class Solution {
public string GetHint(string secret, string guess) {
// Store the frequency of secret
var freq = new Dictionary<char,int>();
int bulls=0;
for(int i=0;i<secret.Length;i++){
if(!freq.ContainsKey(secret[i]))
freq[secret[i]]=1;
else
freq[secret[i]]++;
}
// Find the no of bull first and reduce the secret count..
int cows=0;
for(int i=0;i<secret.Length;i++){
if(secret[i]==guess[i]){
bulls++;
freq[secret[i]]--;
}
}
// for cows, check if the character not matching and if its required
for(int i=0;i<secret.Length;i++){
if(secret[i]!=guess[i]){
if(freq.ContainsKey(guess[i]) && freq[guess[i]]>0){
cows++;
freq[guess[i]]--;
}
}
}

return bulls+"A"+cows+"B";

}
}


пишите свое решение в комментариях 👇

@csharp_ci
Список 500 популярных вопросов и ответов с собеседований C# csharp

Github

@csharp_ci
Что выведет код ?

using System;
using System.Text;
public class Program
{
public static void Main(string[] args)
{
String str = "";

StringBuilder sb1 = new StringBuilder("TechBeamers");
StringBuilder sb2 = new StringBuilder("TechBeamers");
StringBuilder sb3 = new StringBuilder("Welcome");
StringBuilder sb4 = sb3;

if (sb1.Equals(sb2)) str += "1";
if (sb2.Equals(sb3)) str += "2";
if (sb3.Equals(sb4)) str += "3";


String str1 = "TechBeamers";
String str2 = "Welcome";
String str3 = str2;

if (str1.Equals(str2)) str += "4";
if (str2.Equals(str3)) str += "5";
Console.WriteLine(str);
}
}


Ответ