Skip to content
Agentmart
Submit a tool

dotnet10-csharp14

Project-agnostic .NET 10 and C# 14 best practices: field keyword, null-conditional assignment, extension members, unbound generic nameof, runtime…

Skill by lucy-camilo

IndexedApache-2.0★ 19
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/camiloandresgtruniandes-dotnet10-csharp14

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Project-agnostic .NET 10 and C# 14 best practices: field keyword, null-conditional assignment, extension members, unbound generic nameof, runtime improvements, ASP.NET Core, and EF Core guidance. Trigger: When using .NET 10, C# 14, ASP.NET Core 10, EF Core 10, or deciding whether to adopt new language/runtime features.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 26, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/dotnet10-csharp14

What's inside

Skill name
dotnet10-csharp14
Description
Project-agnostic .NET 10 and C# 14 best practices: field keyword, null-conditional assignment, extension members, unbound generic nameof, runtime improvements, ASP.NET Core, and EF Core guidance. Trigger: When using .NET 10, C# 14, ASP.NET Core 10, EF Core 10, or deciding whether to adopt new language/runtime features.
License
Apache-2.0
Metadata
author: lucy-camilo · version: 1.1
Instructions
221 lines in SKILL.md · view on GitHub

Files (1)

  • SKILL.md

SKILL.md (first lines)

# .NET 10 + C# 14 Best Practices

## When to Use

Use this skill when:
- Writing or reviewing .NET 10 / C# 14 code
- Deciding whether to adopt a new C# 14 feature
- Modernizing .NET projects without rewriting stable code unnecessarily
- Reviewing ASP.NET Core 10, EF Core 10, or runtime-related changes

Always combine this with the repo's own `docs/STANDARDS.md` and the generic `csharp-dotnet` skill when broader .NET architecture guidance is needed.

## Adoption Rule

> Use .NET 10 / C# 14 features only when they improve clarity, safety, maintainability, or performance. Do not rewrite working code just to use new syntax.

Before adopting new features, verify:
- [ ] The project targets .NET 10 and LangVersion supports C# 14
- [ ] CI/build images have the .NET 10 SDK installed
- [ ] Team/editor tooling supports the syntax
- [ ] Existing tests still pass
- [ ] The feature fits the project's architecture and style guide

## C# 14 Features Worth Using

### 1. `field` keyword — validated properties without explicit backing field

Use when a property needs simple validation or normalization in the setter.

```csharp
public string Name
{
    get;
    set => field = string.IsNullOrWhiteSpace(value)
        ? throw new ArgumentException("Name is required.", nameof(value))
        : value.Trim();
}
```

Good fits:
- Small invariants on DTOs or domain objects
- Normalization such as trimming strings
- Replacing trivial private backing fields

Avoid when:
- Validation belongs in FluentValidation or another validation layer
- The setter becomes complex
- The class already has a member named `field`; use `@field` or rename to avoid confusion

### 2. Null-conditional assignment — `?.=`

Use when assigning only if the target exists; right-hand side is not evaluated if the receiver is null.

```csharp
currentUser?.LastSeenAt = clock.UtcNow;
```

Good fits:
- Optional state updates
- Defensive assignments in mapping code
- Optional telemetry/log enrichment

Avoid when:
- Null should be treated as an error
- Assignment hides an unexpected missing dependency
- Increment/decrement is needed (`++` / `--` are not supported)

### 3. Extension members — extension properties and static extension methods

Use for tiny, broadly useful helpers where fluent/readable syntax matters.

```csharp
public static class CollectionExtensions
{
    extension<T>(IReadOnlyCollection<T> source)
    {
        public bool IsEmpty => source.Count == 0;
    }
}
```

Good fits:
- Small collection/string/result helpers
- Domain-specific readability improvements
- Avoiding repeated utility boilerplate

Avoid when:
- The extension hides expensive work
- A normal method would be clearer
- It encourages an anemic domain model by moving real behavior out of domain types

### 4. `nameof(List<>)` — unbound generic `nameof`

Use when referring to generic type names without inventing a type argument.

```csharp
var collectionType = nameof(List<>);        // "List"
var mapType = nameof(Dictionary<,>);        // "Dictionary"
```

Good fits:
- Diagnostics and exception messages
- Metadata or validation involving generic type definitions
- Source generators/analyzers

### 5. Partial constructors and partial events

Use to split generated and handwritten code safely.

```csharp
public partial class ReportBuilder
{
    partial void OnBuildFailed(Exception exception);
}
```

Good fits:
- Source generators
- Separating generated code from custom hooks

From CamiloAndresGTRUniandes/lucy-ai, Apache-2.0.

More from CamiloAndresGTRUniandes/lucy-ai

Signals

Stars
19
Forks
2
Open issues
0
Last commit (this folder)
Jul 29, 2026 (3 months ago)
Last release
Jul 31, 2026 (3 months ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
1.1
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from lucy-camilo

Cite this page

dotnet10-csharp14 skill. Agent Mart. https://agentmart.dev/skills/camiloandresgtruniandes-dotnet10-csharp14 (last updated 2026-10-24)