Skip to content

Instantly share code, notes, and snippets.

View mirmostafa's full-sized avatar
🧗‍♂️
Coding is my lifestyle. But I live in Iran 😢

Mohammad Mirmostafa mirmostafa

🧗‍♂️
Coding is my lifestyle. But I live in Iran 😢
View GitHub Profile
@mirmostafa
mirmostafa / Result.cs
Created June 8, 2026 13:58
`union` Result in C# 15 .NET 11
public interface IResult;
public interface IResult<TValue> : IResult;
public readonly record struct Success;
public readonly record struct Error(string? Message = null, IReadOnlyList<Exception>? Exceptions = null)
{
public Error(Exception exceptions) : this(null, [exceptions]) { }
}
public readonly union Result(Success, Error) : IResult;
@mirmostafa
mirmostafa / install_choco.ps1
Last active February 17, 2026 12:33
install choco on Windows 2019
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Use DATABASENAME
Alter Database DATABASENAME Set Recovery Simple
DBCC SHRINKFILE ('YOUR_LOG_NAME_log', 1)
Alter Database DATABASENAME Set Recovery Full
@mirmostafa
mirmostafa / _ReadMe.md
Last active September 11, 2024 09:53
Pattern Matching in C# 12

بهبودهای جدید در Pattern Matching در C# 12

مطابقت با الگوها (Pattern Matching) از نسخه C# 7 معرفی شد و در هر نسخه بعدی بهبود یافته است. در C# 12، امکانات جدیدی به Pattern Matching اضافه شده که امکان نوشتن کدهای خواناتر و قدرتمندتر را فراهم می‌کند. در اینجا به برخی از بهبودهای کلیدی می‌پردازیم:

1. Extended List Patterns

در C# 12، الگوهای لیستی (List Patterns) گسترش یافته‌اند تا با مجموعه‌های پیچیده‌تر مانند آرایه‌ها، List<T> و سایر انواع مجموعه‌ها مطابقت پیدا کنند. الگوهای لیستی به شما اجازه می‌دهند تا از عملیات‌هایی مانند چک کردن وجود عناصر در یک لیست یا انجام عملیات‌های مختلف روی آن‌ها به شکلی تمیز و قابل‌خواندن استفاده کنید.

مثال:
@mirmostafa
mirmostafa / Directory.Packages.props
Last active September 8, 2024 17:10
Best practice for `Directory.Packages.props` by .NET 9.0
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<LangVersion>preview</LangVersion>
<EnablePreviewFeatures>true</EnablePreviewFeatures>
<GenerateRequiresPreviewFeaturesAttribute>true</GenerateRequiresPreviewFeaturesAttribute>
@mirmostafa
mirmostafa / Directory.Build.props
Created June 12, 2024 12:46
Build acceleration
<Project>
<!--
This Directory.Build.props files sets default properties that apply to all projects found in
this folder or subfolders, recursively.
-->
<PropertyGroup>
<!-- Enable Build Acceleration in Visual Studio. -->
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
<!--
@mirmostafa
mirmostafa / sample.cs
Created March 2, 2024 13:33
Pattern Matching - Variable
bool? isOk = dbResult is not null and { Found: true, HasAccess: var hasAccess } ? has Access : null;
@mirmostafa
mirmostafa / EnumerableHelper.cs
Created March 28, 2023 06:59
Mix of Iterator Patteren and Pattern Matching
public static IEnumerable<T> AddRangeImmuted<T>(this IEnumerable<T>? source, IEnumerable<T>? items)
{
return (source, items) switch
{
(null, null) => Enumerable.Empty<T>(),
(_, null) => source,
(null, _) => items,
(_, _) => addRangeImmutedIterator(source, items)
};
static IEnumerable<T> addRangeImmutedIterator(IEnumerable<T> source, IEnumerable<T> items)
@mirmostafa
mirmostafa / .editorconfig
Last active February 10, 2023 14:58
My preferred editorconfig
# Remove the line below if you want to inherit .editorconfig settings from higher directories
root = true
# C# files
[*.cs]
#### Core EditorConfig Options ####
# Indentation and spacing
indent_size = 4
@mirmostafa
mirmostafa / startup.cs
Last active February 17, 2024 11:38
Add IoC and Mock DB to xunit test
public static void ConfigureServices(IServiceCollection services)
{
services.AddUnitTestServices();
var result = services.BuildServiceProvider();
DI.Initialize(result);
InitializeDatabase();
}
private static void InitializeDatabase()
{
var db = DI.GetService<InfraWriteDbContext>();