modern-csharp

modern-csharp is a skill for Claude Code from zdanovichnick/dotnet-pilot. It costs 53 tokens per session (1,551 once invoked), scanned A, original, MIT.

A reference for modern C# language features in .NET 8 and later, including shorter ways to define classes and collections, records, pattern matching, and nullable references.

In plain words
What is it for?
Use it when planning or writing C# code that uses C# 12 through 14 features, especially constructors, collections, records, pattern matching, and nullable reference types.
Why use it?
It helps developers choose current C# syntax and avoid repeating older boilerplate. It also points out details that can cause unexpected behavior, such as how primary-constructor parameters are stored.

Skill for Claude Code

Written for Claude Code: when-to-use in frontmatter.

Part of the dotnet-pilot plugin — 15 skills, 9 agents, 6 hooks, 1 MCP server shipped together

Good fit Use it when planning or writing C# code that uses C# 12 through 14 features, especially constructors, collections, records, pattern matching, and nullable reference types.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/zdanovichnick/dotnet-pilot/modern-csharp
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add zdanovichnick/dotnet-pilot --skill modern-csharp
Clone the repo
git clone --depth 1 https://github.com/zdanovichnick/dotnet-pilot

Made for: Claude Code.

Or install dotnet-pilot, the plugin that ships this one along with the rest of its 15 skills, 9 agents, 6 hooks, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for modern-csharp

README.md
[![agentmods](https://agentmods.dev/badge/skills/zdanovichnick/dotnet-pilot/modern-csharp/github.svg)](https://agentmods.dev/skills/zdanovichnick/dotnet-pilot/modern-csharp)
Your own site
<a href="https://agentmods.dev/skills/zdanovichnick/dotnet-pilot/modern-csharp"><img src="https://agentmods.dev/badge/skills/zdanovichnick/dotnet-pilot/modern-csharp/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for modern-csharp

Your own site · 80×15
<a href="https://agentmods.dev/skills/zdanovichnick/dotnet-pilot/modern-csharp"><img src="https://agentmods.dev/badge/skills/zdanovichnick/dotnet-pilot/modern-csharp.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 53 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,551 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00053 $0.01551
Opus 5.5 $0.00021 $0.00620
Sonnet 5.5 $0.00011 $0.00310
Haiku 4.5 $0.00005 $0.00155

Measured 29d ago against content hash 61b50ac7b0c0, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

modern-csharp scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 29d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/modern-csharp/SKILL.md · 135 lines

How it starts

The opening of the file, as written. The whole thing — 135 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Modern C# (12–14)

.NET 10 ships C# 14 as the default language version — no <LangVersion> needed. The syntax of these features is assumed known; this file carries the traps.

Primary Constructors (C# 12)

  • Parameters are captured as mutable hidden fields, not readonly. Assigning to one inside a method mutates class state. When that matters, copy into private readonly T _x = x; and use only the field.
  • Using a parameter both to initialise a field and directly in a member body captures it twice (warning CS9124) — two copies that can diverge. Pick one.
  • On records, primary-constructor parameters become public properties; on classes and structs they do not.

Collection Expressions (C# 12)

  • The concrete type behind IEnumerable<T> x = [..] / IReadOnlyList<T> x = [..] is compiler-chosen. Don't downcast it to List<T> or T[].
  • [..a, ..b] allocates a new collection every time. On a hot path that is a real allocation, not a view.

Records

  • Equality is member-wise, but collection members compare by reference: two records holding equal List<T> contents are not equal. Records used as EF keys, cache keys or dedupe keys need scalar members or a custom Equals.
  • with is a shallow copy — a mutated list inside the copy is the original's list.
  • record struct is a value type; it is not guaranteed to be stack-allocated (boxed in interfaces, on the heap as a field of a class). Unlike readonly record struct, it is mutable.
  • required members are bypassed by a constructor marked [SetsRequiredMembers] — the compiler then trusts that constructor to set them all.

Pattern Matching

  • is not null or 42 parses as (is not null) or 42; the compiler warns that 42 is redundant. Write is not (null or 42).
  • A switch expression without a discard arm throws SwitchExpressionException at runtime on an unmatched value. Add _ => throw new UnreachableException() so the failure is explicit.

Nullable Reference Types

Read the full file on GitHub · 135 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 29d ago Changed · -135 lines · +19 tokens per session 61b50ac7b0c0
  2. 1mo ago First seen · 270 lines · 34 tokens per session scan A a8ac65fac7ff

Subscribe to this mod's changes

modern-csharp is a skill published in the GitHub repository zdanovichnick/dotnet-pilot (5 stars, last pushed 13d ago), licensed MIT. It adds 53 tokens to every session and 1,551 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

language-csharp

C# and .NET idioms — .NET 8 LTS, C# NRT, records, value semantics, switch expressions, async/await, Task, ValueTask, CancellationToken, ConfigureAwait, IOptions , LINQ, Span , ArrayPool, hot path, allocation profiling, and performance. Auto-load when working with .cs files, .csproj, .sln, Directory.Build.props, or…

lugassawan/swe-workbench · 142 tokens

dotnet-backend-expert

This skill should be used when the user is writing, reviewing, debugging, or architecting pure .NET backend code for Kestrel-hosted services. It provides expert critique for REST endpoints, SignalR hubs, TypeScript/React client integration shape, pragmatic Rust interop, application services, AppHost-aware project…

mathisk2095/jko-claude-plugins · 181 tokens

write-dotnet-code

Write and review C#/.NET code in Dynamo following Dynamo coding standards, modern C# patterns, and repo conventions. Use this skill whenever writing C# code, reviewing a PR diff, designing types, managing PublicAPI surface files, choosing patterns, making performance decisions, or refactoring in the Dynamo codebase.…

DynamoDS/dynamo-agent-plugins · 91 tokens

clean-dotnet-code

Perform janitorial tasks on C#/.NET code including cleanup, modernization, and tech debt remediation.

DynamoDS/dynamo-agent-plugins · 25 tokens

build-and-test

How to build and test .NET projects in the Agent Framework repository. Use this when verifying or testing changes.

microsoft/agent-framework · 26 tokens

azure-eventgrid-dotnet

Azure Event Grid SDK for .NET. Client library for publishing and consuming events with Azure Event Grid. Use for event-driven architectures, pub/sub messaging, CloudEvents, and EventGridEvents. Triggers: "Event Grid", "EventGridPublisherClient", "CloudEvent", "EventGridEvent", "publish events .NET", "event-driven"…

microsoft/skills · 80 tokens