This media is not supported in your browser
VIEW IN TELEGRAM
📣 Внимание C# разрабочики!
Сохраните этот пост и возвращайтесь к нему в любое время, когда вам понадобится освежить в памяти методы LINQ!
@csharp_ci
Сохраните этот пост и возвращайтесь к нему в любое время, когда вам понадобится освежить в памяти методы LINQ!
@csharp_ci
Лучший способ получать свежие обновлении и следить за трендами в разработке.
Python: t.iss.one/pythonl
C#: t.iss.one/csharp_1001_notes
C/C++/ t.iss.one/cpluspluc
Машинное обучение: t.iss.one/ai_machinelearning_big_data
Data Science: t.iss.one/data_analysis_ml
Devops: t.iss.one/devOPSitsec
Go: t.iss.one/Golang_google
Базы данных: t.iss.one/sqlhub
Rust: t.iss.one/rust_code
Javascript: t.iss.one/javascriptv
React: t.iss.one/react_tg
PHP: t.iss.one/phpshka
Android: t.iss.one/android_its
Мобильная разработка: t.iss.one/mobdevelop
Linux: t.iss.one/+A8jY79rcyKJlYWY6
Big Data: t.iss.one/bigdatai
Хакинг: t.iss.one/linuxkalii
Java: t.iss.one/javatg
Папка Go разработчика: t.iss.one/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.iss.one/addlist/eEPya-HF6mkxMGIy
🇬🇧Английский: t.iss.one/english_forprogrammers
Please open Telegram to view this post
VIEW IN TELEGRAM
9 "Черная магия" и "трюки" в языке C#
C# является чрезвычайно продвинутым языком благодаря наличию в нем "синтаксического сахара".
"Сахар" настолько удобен, что некоторым может показаться, что они жестко прописаны в компиляторе C#, что-то вроде "черной магии".
Итак, давайте посмотрим, являются ли эти возможности в C# жестко прописанными компилятором ("черная магия") или расширяемыми ("трюки") "утиной типизацией".
Попробуйте определить сами)
Правильные ответы вы найдете в статье.
1. LINQ operations, with IEnumerable<T> type
2. async/await, with Task/ValueTask types
3. Expression trees, with Expression<T> type
4. Interpolated strings, with FormattableString type
5. yield return, with IEnumerable<T> type;
6. foreach loop, с IEnumerable<T> type
7. using keyword, with IDisposable interface
8. T?, with Nullable<T> type
9. Generic operations of Index/Range for any type
📌Статья
@csharp_ci
C# является чрезвычайно продвинутым языком благодаря наличию в нем "синтаксического сахара".
"Сахар" настолько удобен, что некоторым может показаться, что они жестко прописаны в компиляторе C#, что-то вроде "черной магии".
Итак, давайте посмотрим, являются ли эти возможности в C# жестко прописанными компилятором ("черная магия") или расширяемыми ("трюки") "утиной типизацией".
Попробуйте определить сами)
Правильные ответы вы найдете в статье.
1. LINQ operations, with IEnumerable<T> type
2. async/await, with Task/ValueTask types
3. Expression trees, with Expression<T> type
4. Interpolated strings, with FormattableString type
5. yield return, with IEnumerable<T> type;
6. foreach loop, с IEnumerable<T> type
7. using keyword, with IDisposable interface
8. T?, with Nullable<T> type
9. Generic operations of Index/Range for any type
📌Статья
@csharp_ci
В этой статье представлена коллекция фрагментов кода на языке C#, которые охватывают широкий спектр задач, с которыми можно столкнуться при разработке программного обеспечения.
Эти фрагменты не только демонстрируют возможности C#, но и служат полезным ресурсом для расширения вашего инструментария программиста.
Так что, независимо от того, являетесь ли вы опытным разработчиком или новичком в C#, погрузитесь в работу и изучите эти изящные решения с кодом!
📌Статья
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Awesome-C# — огромный список полезных фреймворков, готовых скриптов, библиотек и программного обеспечения.
▪Github
@csharp_ci
▪Github
@csharp_ci
JsonProperty.EFCore: Упрощаем работу с JSON-полями в Entity Framework Core
Иногда перед разработчиками встает задача использования JSON-полей в Entity Framework Core. Традиционный подход с использованием Fluent API требует написания дополнительного кода, что может усложнить проект. Пакет JsonProperty.EFCore решает эту проблему.
Проблема: Сложное управление JSON-полями
Entity Framework Core отлично поддерживает работу с реляционными базами данных, но управление JSON-полями может стать непростой задачей.
JsonProperty.EFCore: Упрощенный подход
JsonProperty.EFCore предлагает новое решение для управления JSON-полями. Он позволяет использовать JSON-поля в EF Core без необходимости настройки сложного Fluent API. Благодаря этому открытому проекту NuGet, разработчики могут упростить свой рабочий процесс и сосредоточиться на создании логики приложения, минуя сложные настройки EF Core.
Особенности и преимущества
Простая интеграция: JsonProperty.EFCore предлагает простой процесс интеграции.
Поддержка обобщенных типов: Пакет поддерживает обобщенные типы, такие как JsonEnumerable<T> и JsonDictionary<TKey, TValue>, что позволяет разработчикам работать с пользовательскими типами элементов в коллекциях JSON без усилий.
Безупречное управление JSON: С JsonProperty.EFCore управление JSON-полями становится намного проще.
Строгая сериализация типов: Пакет позволяет разработчикам включить строгую сериализацию типов.
Полиморфизм: строгая типизация позволяет сохранить полиморфные типы при сериализации и десериализации в JSON.
Примеры использования:
JsonProperty.EFCore, чтобы продемонстрировать его полезность и удобство:
Хранение параметров продукта:
А вот пример управления коллекцией JsonDictionary:
Это сгенерирует следующие данные для поля в формате JSON, если настройка JsonSettings.StrictTypeSerialization имеет значение true (по умолчанию):
Также можно добавлять и редактировать элементы поля JsonDictionary:
После этого JSON-поле примет следующий вид:
Управление элементами списка дел:
При этом в списке JsonList<TodoItem> можно также хранить элементы с типом, наследуемым от TodoItem.
Простое добавление полиморфного поля:
JsonProperty.EFCore:
Теперь можно использовать полиморфное поле:
▪Github
@csharp_ci
Иногда перед разработчиками встает задача использования JSON-полей в Entity Framework Core. Традиционный подход с использованием Fluent API требует написания дополнительного кода, что может усложнить проект. Пакет JsonProperty.EFCore решает эту проблему.
Проблема: Сложное управление JSON-полями
Entity Framework Core отлично поддерживает работу с реляционными базами данных, но управление JSON-полями может стать непростой задачей.
JsonProperty.EFCore: Упрощенный подход
JsonProperty.EFCore предлагает новое решение для управления JSON-полями. Он позволяет использовать JSON-поля в EF Core без необходимости настройки сложного Fluent API. Благодаря этому открытому проекту NuGet, разработчики могут упростить свой рабочий процесс и сосредоточиться на создании логики приложения, минуя сложные настройки EF Core.
Особенности и преимущества
Простая интеграция: JsonProperty.EFCore предлагает простой процесс интеграции.
Поддержка обобщенных типов: Пакет поддерживает обобщенные типы, такие как JsonEnumerable<T> и JsonDictionary<TKey, TValue>, что позволяет разработчикам работать с пользовательскими типами элементов в коллекциях JSON без усилий.
Безупречное управление JSON: С JsonProperty.EFCore управление JSON-полями становится намного проще.
Строгая сериализация типов: Пакет позволяет разработчикам включить строгую сериализацию типов.
Полиморфизм: строгая типизация позволяет сохранить полиморфные типы при сериализации и десериализации в JSON.
Примеры использования:
JsonProperty.EFCore, чтобы продемонстрировать его полезность и удобство:
Хранение параметров продукта:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public JsonDictionary Parameters { get; set; } = new();
}
Запись JsonDictionary
аналогична JsonDictionary<string, object>. При этом полиморфизм позволяет хранить значения любых типов в таком словаре.А вот пример управления коллекцией JsonDictionary:
Product product = new() {Name="Phone",Price=500.95m,Amount=21,Parameters={
VirtualDictionary = new Dictionary<string,object>() {
{"Camera",13.5 },{"OS","Android" },{"Screen","1080x900"},{"Storage",32}
}
}};
db.Goods.Add(product);
db.SaveChanges();
Это сгенерирует следующие данные для поля в формате JSON, если настройка JsonSettings.StrictTypeSerialization имеет значение true (по умолчанию):
{
"Camera": [13.5, "System.Double"],
"OS": ["Android", "System.String"],
"Screen": ["1080x900", "System.String"],
"Storage": [32, "System.Int32"]
}
Также можно добавлять и редактировать элементы поля JsonDictionary:
Product product = db.Goods.FirstOrDefault();
product.Parameters.Add("Battery capacity", 3000);
product.Parameters.Edit(dict => {
dict["Battery capacity"] = 4000;
dict["Storage"] = 64;
dict.Add("RAM", 4);
return dict;
});
После этого JSON-поле примет следующий вид:
{
"Camera": [13.5, "System.Double"],
"OS": ["Android", "System.String"],
"Screen": ["1080x900", "System.String"],
"Storage": [64, "System.Int32"],
"Battery capacity": [4000, "System.Int32"],
"RAM": [4, "System.Int32"]
}
Управление элементами списка дел:
public class Note
{
public int Id { get; set; }
public string Header { get; set; }
public JsonList<TodoItem> Todos { get; set; } = new();
}
При этом в списке JsonList<TodoItem> можно также хранить элементы с типом, наследуемым от TodoItem.
Простое добавление полиморфного поля:
JsonProperty.EFCore:
using JsonProperty.EFCore;
class MyEntity
{
public int Id { get; set; }
public int Title { get; set; }
public JsonItem<Base> Content { get; set; } = new();
}
Теперь можно использовать полиморфное поле:
MyEntity myEntity = new();
myEntity.Content.Serialize(new DerivedType1());
Base val = myEntity.Content.Deserialize();
Console.WriteLine(val is DerivedType1); //true
▪Github
@csharp_ci
🔥C# Source Generators
Полезный список Source Generators (генераторов кода) C#.
Какие задачи решают генераторы?
В первую очередь — создание шаблонного кода. Если у вас, например, есть методы Equals, GetHashCode, операторы равенства и неравенства, скажем, обеспечивающие структурное сравнение данных, писать их вручную для каждого типа очень неудобно.
Было бы неплохо отдать эту задачу генератору, который напишет этот код за нас. В том числе можно, например, добавить всем типам в проекте осмысленный метод ToString, создавать типы по схеме, добавить mapping, например, как в AutoMapper, материализацию объектов баз данных.
Во вторых, благодаря тому, что мы теперь легко и просто можем создавать шаблонный код, открываются некоторые интересные возможности по оптимизации наших приложений. Например там, где мы раньше использовали рефлексию просто для того, чтобы не писать руками код. Скажем, регистрация типов для dependency injection, методы сериализации.
▪Github
▪Source Generators в действии
@csharp_ci
Полезный список Source Generators (генераторов кода) C#.
Какие задачи решают генераторы?
В первую очередь — создание шаблонного кода. Если у вас, например, есть методы Equals, GetHashCode, операторы равенства и неравенства, скажем, обеспечивающие структурное сравнение данных, писать их вручную для каждого типа очень неудобно.
Было бы неплохо отдать эту задачу генератору, который напишет этот код за нас. В том числе можно, например, добавить всем типам в проекте осмысленный метод ToString, создавать типы по схеме, добавить mapping, например, как в AutoMapper, материализацию объектов баз данных.
Во вторых, благодаря тому, что мы теперь легко и просто можем создавать шаблонный код, открываются некоторые интересные возможности по оптимизации наших приложений. Например там, где мы раньше использовали рефлексию просто для того, чтобы не писать руками код. Скажем, регистрация типов для dependency injection, методы сериализации.
▪Github
▪Source Generators в действии
@csharp_ci
🎨 Awesome Software Architecture
Полезный список статей и ресурсов для изучения и применения на практике архитектуры, паттернов и принципов программного обеспечения.
https://awesome-architecture.com/
@csharp_ci
Полезный список статей и ресурсов для изучения и применения на практике архитектуры, паттернов и принципов программного обеспечения.
https://awesome-architecture.com/
@csharp_ci