C# and .NET
SkillAI & modelsUse when building on .NET 8+ with C# 12. Covers nullable reference types, records, async/await correctness, minimal APIs, dependency injection, and EF Core query performance.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the C# and .NET skill
What this skill tells your AI
The instructions your AI receives, as published by nimadorostkar/claude-skills-collection in skills/languages/csharp-dotnet/SKILL.md and read by ahel’s review.
Purpose
Build .NET applications that are null-safe by contract, correctly asynchronous end to end, and free of the ORM traps that quietly turn one query into a thousand.
When to Use
- Writing or reviewing C# on .NET 8 or later.
- Enabling nullable reference types on an existing project.
- Designing minimal APIs or ASP.NET Core services.
- Diagnosing async deadlocks or thread-pool starvation.
- Fixing EF Core N+1 queries and tracking overhead.
Capabilities
- Nullable reference types, records, pattern matching, required members.
- Async correctness:
ConfigureAwait, cancellation tokens,IAsyncEnumerable. - Minimal APIs, endpoint filters, model validation, problem details.
- Dependency injection lifetimes and scope correctness.
- EF Core: projections, split queries, no-tracking reads, compiled queries.
Inputs
- Solution or project files and target framework.
- Whether the project is a library, web API, or worker service.
- Data-access layer and database engine.
Outputs
- Code compiling with
<Nullable>enable</Nullable>and<TreatWarningsAsErrors>true</TreatWarningsAsErrors>. - Async paths that flow a
CancellationTokenfrom request to database. - EF Core queries with explicit projection and tracking behavior.
Workflow
- Enable the gates — Nullable reference types and warnings-as-errors, project-wide.
- Model — Records for immutable values;
requiredmembers instead of constructor sprawl. - Thread cancellation — Every async method takes a
CancellationTokenand passes it down. - Shape the queries — Project to DTOs; never materialize entities you will not mutate.
- Gate — Build with warnings as errors, run analyzers, run the test suite.
Best Practices
- Never call
.Resultor.Wait()on a Task. That is how deadlocks and starvation happen — async all the way down. - Use
ConfigureAwait(false)in library code; it is unnecessary in ASP.NET Core application code. - Register
DbContextas scoped. Injecting it into a singleton is a correctness bug, not a style issue. - Read-only queries use
AsNoTracking(). Tracking every row you only intend to display wastes memory and time. - Return
Results.Problem(...)/ RFC 7807 payloads rather than bare status codes. - Validate at the endpoint, not in the domain. The domain should be able to assume its inputs are valid.
Examples
Minimal API endpoint with cancellation and projection:
app.MapGet("/orders/{id:guid}", async (
Guid id,
AppDbContext db,
CancellationToken ct) =>
{
var order = await db.Orders
.AsNoTracking()
.Where(o => o.Id == id)
.Select(o => new OrderSummary(
o.Id,
o.Customer.Name,
o.Lines.Count,
o.Lines.Sum(l => l.Price * l.Quantity)))
.SingleOrDefaultAsync(ct);
return order is null
? Results.Problem(statusCode: 404, title: "Order not found")
: Results.Ok(order);
});
Notes
IAsyncEnumerable<T>streams results without buffering the full set — use it for large exports.- EF Core's split-query mode avoids the cartesian explosion of multiple
Includes, at the cost of extra round trips. Measure both. - Source generators (e.g.
System.Text.Json) remove reflection at startup and matter a great deal for AOT and cold-start latency.
Signals
- GitHub stars
- 26
- Forks
- 3
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
csharp-dotnet-nimadorostkar- Source
- github.com/nimadorostkar/claude-skills-collection