Agent skill

Dotnet10 Features

by runceel in runceel/ReactiveProperty

Reference for the .NET 10 / C 14 features that are relevant to the ReactiveProperty repository.

MITAuto-check passedDevelopment

Install Dotnet10 Features

skills CLI
$ npx skills add runceel/ReactiveProperty --skill dotnet10-features -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install runceel/ReactiveProperty dotnet10-features --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/runceel/ReactiveProperty.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/dotnet10-features .claude/skills/dotnet10-features && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dotnet10-features
GitHub stars
944
Token cost
~2.7k tokens
SKILL.md length
1,001 words
Files
1
Skills in repo
12
Repo updated
First seen
Licence
MIT

At a glance

Reference for the .NET 10 / C 14 features that are relevant to the ReactiveProperty repository.

  • Works in 8 steps: The field keyword — HIGH relevance → Extension members — HIGH relevance → Null-conditional assignment (?./?[] on… → …
  • Include mentions of .NET 10
  • SKILL.md covers Repository context (read this…, How to enable C# 14 in a…, C# 14 features, ranked by… and ASP.NET Core / Blazor 10 (for…, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Dotnet10 Features is an agent skill from runceel/ReactiveProperty. Reference for the .NET 10 / C 14 features that are relevant to the ReactiveProperty repository. Use this when adopting or evaluating .NET 10 / C 14 language and Blazor features in this codebase: modernizing INotifyPropertyChanged property accessors, refactoring the many Reactive.Bindings extension methods, raising LangVersion or adding a net10.0 target framework, or working on ReactiveProperty.Blazor / Blazor samples. Triggers include mentions of ".NET 10", "C 14", "field keyword", "extension members", "net10.0"…

Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Refactoring. It works with C#, Blazor and .NET. The repository describes itself as: ReactiveProperty provides MVVM and asynchronous support features under Reactive Extensions. Target frameworks are .NET 6+, .NET Framework 4.7.2 and .NET Standard 2.0. The licence is MIT.

When your agent uses it

  • Include mentions of .NET 10
  • Extension members
  • Blazor net10 work in this repo

Example prompts

  • “.NET 10”
  • “field keyword”
  • “extension members”
  • “/dotnet10-features”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. The field keyword — HIGH relevance
  2. Extension members — HIGH relevance
  3. Null-conditional assignment (?./?[] on the left side) — MEDIUM relevance
  4. First-class Span / ReadOnlySpan conversions — MEDIUM (performance)
  5. Simple lambda parameters with modifiers — MEDIUM/LOW relevance
  6. Partial events and constructors — MEDIUM relevance
  7. nameof with unbound generic types — LOW relevance
  8. User-defined compound assignment operators — LOW relevance

What it can do on your machine

Read from SKILL.md and the folder at commit e7e6474. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are csharp and xml).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • learn.microsoft.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Dotnet10 Features loads about 2.7k tokens when it runs. Until then it costs about 148 tokens; SKILL.md has 1,001 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~148
When it runs · the whole SKILL.md, loaded when a task matches
~2.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from runceel/ReactiveProperty at commit e7e6474, republished under its MIT licence (© runceel). 1,001 words, ~2,743 tokens.

Download SKILL.mdSave it as .claude/skills/dotnet10-features/SKILL.md (or your agent's skills folder).
name
dotnet10-features
description
Reference for the .NET 10 / C# 14 features that are relevant to the ReactiveProperty repository. Use this when adopting or evaluating .NET 10 / C# 14 language and Blazor features in this codebase: modernizing INotifyPropertyChanged property accessors, refactoring the many `Reactive.Bindings` extension methods, raising LangVersion or adding a net10.0 target framework, or working on ReactiveProperty.Blazor / Blazor samples. Triggers include mentions of ".NET 10", "C# 14", "field keyword", "extension members", "net10.0", "LangVersion", or Blazor net10 work in this repo.

.NET 10 / C# 14 features relevant to ReactiveProperty

This skill curates the .NET 10 (and its bundled C# 14) features that actually matter for this repository, and maps each one to concrete ReactiveProperty scenarios. It is intentionally scoped: it skips .NET 10 features with no bearing on a reactive MVVM library.

Repository context (read this first)

Target frameworks and language version are not uniform across the solution, so a C# 14 feature may be unavailable in a given project:

ProjectTarget framework(s)C# 14 available?
ReactiveProperty.Corenetstandard2.0;net8.0;net9.0;net472Only if LangVersion is raised; runtime-dependent features stay off on netstandard2.0/net472
ReactiveProperty (main, ReactiveProperty.NETStandard)netstandard2.0;net8.0;net9.0;net472Same as above
ReactiveProperty.Platform.WPFnet8.0-windows;net9.0-windows;net472Same as above
ReactiveProperty.Platform.UWP(UWP TFMs)Same as above
ReactiveProperty.Platform.Blazornet8.0;net9.0;net10.0Yes on the net10.0 leg
Samples/**, Blazor samplesinclude net10.0Yes

Key facts:

  • Source/Directory.Build.props currently pins <LangVersion>12.0</LangVersion>, so the library compiles as C# 12 today. Adopting any C# 14 feature in the library requires raising LangVersion (to 14 / latest / preview).
  • net10.0 is currently used only by ReactiveProperty.Platform.Blazor and the samples. The core/main/WPF/UWP libraries do not target net10.0.
  • The library is multi-targeted down to netstandard2.0 and net472. C# 14 language features that the compiler can lower (e.g. field, extension members, null-conditional assignment, partial members) work across all TFMs once LangVersion is raised, but features that depend on the .NET 10 runtime/BCL (e.g. first-class Span<T> conversions that rely on new BCL APIs) will not light up on the older TFMs. Guard those with #if NET10_0_OR_GREATER when needed.

How to enable C# 14 in a project here

xml
<!-- Raise once in Source/Directory.Build.props, or per-project. -->
<LangVersion>14.0</LangVersion>

For runtime/BCL-gated features, multi-target and branch with the framework constant:

csharp
#if NET10_0_OR_GREATER
    // .NET 10-only path
#else
    // fallback for net8.0 / net9.0 / netstandard2.0 / net472
#endif

C# 14 features, ranked by relevance to this repo

1. The field keyword — HIGH relevance

field exposes the compiler-synthesized backing field inside a property accessor, so you can add validation/notification without declaring an explicit field. ReactiveProperty exists to serve MVVM/INotifyPropertyChanged, and both the library internals and consumer ViewModels are full of hand-written backing fields.

Classic INPC property:

csharp
private string _name = "";
public string Name
{
    get => _name;
    set
    {
        if (_name == value) return;
        _name = value;
        PropertyChanged?.Invoke(this, new(nameof(Name)));
    }
}

With field:

csharp
public string Name
{
    get;
    set
    {
        if (field == value) return;
        field = value;
        PropertyChanged?.Invoke(this, new(nameof(Name)));
    }
}

Notes for this repo:

  • Watch for the naming collision: identifiers literally named field must be disambiguated with @field or this.field.
  • Works on all TFMs once LangVersion >= 14; this is the lowest-risk C# 14 adoption here.
2. Extension members — HIGH relevance

ReactiveProperty's public surface is heavily built on extension methods in the Reactive.Bindings namespace (ToReactiveProperty, ToReadOnlyReactivePropertySlim, ObserveProperty, CombineLatest helpers, etc.). C# 14 adds an extension block syntax that also enables extension properties, static extension members, and extension operators — grouped by receiver instead of repeating this T source on every method.

csharp
public static class ObservableExtensions
{
    extension<T>(IObservable<T> source)
    {
        // extension method (same call site as today)
        public ReactiveProperty<T> ToReactiveProperty(T initialValue = default!)
            => new ReactiveProperty<T>(source, initialValue);

        // NEW: extension property
        public IObservable<T> Shared => source.Publish().RefCount();
    }
}

Notes for this repo:

  • Lets related operators on IObservable<T> / IReactiveProperty<T> be grouped in one extension(...) block, improving discoverability and enabling property-style helpers.
  • This is a language feature (compiler-lowered), so it can apply across all TFMs once LangVersion is raised — but it is an API-shape decision; keep existing extension method signatures for source/binary compatibility and only add new members.
3. Null-conditional assignment (?./?[] on the left side) — MEDIUM relevance

You can now assign through ?./?[]:

csharp
// before
if (viewModel is not null) viewModel.SelectedItem = item;
// C# 14
viewModel?.SelectedItem = item;

Useful in ViewModel/event-handler glue and in sample apps. Increment/decrement (++/--) are not allowed on the conditional left side; compound assignments (+=, etc.) are.

4. First-class Span<T> / ReadOnlySpan<T> conversions — MEDIUM (performance)

C# 14 adds implicit conversions among Span<T>, ReadOnlySpan<T>, and T[], improving overload resolution and generic inference for span-based, allocation-free code paths. Relevant only in hot paths (e.g. buffer/array handling inside operators).

Caveat: the most useful conversions rely on .NET 10 BCL support, so gate span-optimized paths with #if NET10_0_OR_GREATER and keep an allocating fallback for net8.0/net9.0/ netstandard2.0/net472.

5. Simple lambda parameters with modifiers — MEDIUM/LOW relevance

Modifiers (ref, in, out, scoped, ref readonly) can now be applied to lambda parameters without restating the type:

csharp
delegate bool TryParse<T>(string text, out T result);
TryParse<int> parse = (text, out result) => int.TryParse(text, out result);

Handy for Rx/LINQ-style lambdas and TryParse-shaped converters in samples. params still requires an explicit type.

Show full SKILL.md (393 more words)Show less
6. Partial events and constructors — MEDIUM relevance

Instance constructors and events can now be partial (one defining + one implementing declaration). This is primarily a source-generator enabler. If any INPC/event plumbing in this repo (or a consumer toolkit pattern) is generated, partial events let a generator provide add/remove accessors while the field-like event is declared by hand.

7. nameof with unbound generic types — LOW relevance

nameof(ReactiveProperty<>) now evaluates to "ReactiveProperty". Minor convenience for diagnostics, logging, and tests that reference open generic types.

8. User-defined compound assignment operators — LOW relevance

You can define +=, -=, etc. directly (instead of relying on the binary operator plus an assignment). Niche for this library; mentioned for completeness.


ASP.NET Core / Blazor 10 (for ReactiveProperty.Platform.Blazor and Blazor samples)

ReactiveProperty.Platform.Blazor targets net10.0 and centers on EditForm validation (ReactivePropertiesValidator, EditContext.EnableReactivePropertiesValidation()) plus command helpers. The most relevant .NET 10 Blazor changes:

  • Improved form validation — new opt-in validation (builder.Services.AddValidation() + [ValidatableType]) that validates nested objects and collection items. This overlaps with ReactiveProperty's EditContext validation integration; be aware of how the two interact when both are enabled on the same EditForm, and document the recommended combination.
  • OwningComponentBase now implements IAsyncDisposable — relevant to the disposal pattern in ReactivePropertiesValidator (currently IDisposable wrapping a SingleAssignmentDisposable). Async disposal can be useful where reactive subscriptions own async resources.
  • Declarative state persistence ([PersistentState]) — public properties marked [PersistentState] are auto-persisted via PersistentComponentState during prerendering, removing the manual RegisterOnPersisting boilerplate. Useful for ViewModel-held state in prerendered Blazor Web App samples.
  • Not Found handling (Router NotFoundPage parameter and NavigationManager-based Not Found responses) and Blazor script served as a static web asset — general improvements worth knowing when updating the Blazor samples to net10.0.

When bumping the Blazor sample/template projects, also review the version-conditioned Microsoft.AspNetCore.Components.* package versions in Directory.Packages.props (10.0.0 entries are gated on '$(TargetFramework)' == 'net10.0').


Adoption caveats (summary)

  • The core libraries are C# 12 today (LangVersion 12.0) and do not target net10.0. Raising LangVersion is required before any C# 14 syntax compiles.
  • Multi-targeting to netstandard2.0/net472 means runtime/BCL-gated features must be #if NET10_0_OR_GREATER-guarded; language-only features are fine across TFMs.
  • This is a published NuGet library — preserve existing public/extension API signatures for source and binary compatibility; prefer adding members over changing them.

References (official docs)

© runceel, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .github/skills/dotnet10-features of runceel/ReactiveProperty.

Open the folder on GitHubat commit e7e6474

Compare with similar skills

Dotnet10 Features next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dotnet10 Features compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dotnet10 Features this skillrunceel/ReactiveProperty944—~2.7kAutomated safety check: PassMIT
Add Refactoringdotnet/roslynator3.5k—~946Automated safety check: PassCustom licence
Dynamo Dotnet ExpertDynamoDS/Dynamo2k—~922Automated safety check: PassApache-2.0
Deprecate Analyzer Or Refactoringdotnet/roslynator3.5k—~511Automated safety check: PassCustom licence
Okojo Test262akeit0/okojo160—~742Automated safety check: PassMIT
Refactor AnalysisSamsung/TizenFX214—~2.6kAutomated safety check: PassApache-2.0

Similar skills

  • Add Refactoring

    dotnet/roslynator

    Official

    A skill your agent uses when adding a new RR refactoring in roslynator, editing Refactorings.xml, registering in RefactoringContext, or when refactorings-testing.md shows XunitRefactoringVerifier —…

    3.5k GitHub stars~946 tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Dynamo Dotnet Expert

    DynamoDS/Dynamo

    Write and review C/.NET code in Dynamo following Dynamo coding standards, modern C patterns, and repo conventions.

    2k GitHub stars~922 tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    A skill your agent uses when obsoleting or retiring RCS, RR, or RCF in roslynator, replacing an analyzer with another id, or when tempted to use IsObsolete on an Analyzer entry — analyzers use…

    3.5k GitHub stars~511 tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Okojo Test262

    akeit0/okojo

    Run and continue Okojo Test262 compliance work. An agent skill from akeit0/okojo.

    160 GitHub stars~742 tokensUpdated 16 days ago
    DevelopmentAuto-check passed
  • Refactor Analysis

    Samsung/TizenFX

    Automatically scans the TizenFX codebase on a rotating schedule to discover .NET 8 / C 12+ refactoring targets and register them as GitHub Issues.

    214 GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Official

    Refactors C# and .NET code without changing behavior, using binding-aware edits plus a build and tests, and separating out or declining anything that alters behavior.

    5.6k GitHub starsUsed in 1 repo~3.1k tokens
    DevelopmentAuto-check passed

More from runceel/ReactiveProperty

All 12 skills in this repo
  • Msbuild Antipatterns

    runceel/ReactiveProperty

    Catalog of MSBuild anti-patterns with detection rules and fix recipes.

    944 GitHub stars~3.7k tokensUpdated 1 mo ago
    Auto-check passed
  • Binlog Failure Analysis

    runceel/ReactiveProperty

    Analyze MSBuild binary logs to diagnose build failures by replaying binlogs to searchable text logs.

    944 GitHub stars~1.1k tokensUpdated 1 mo ago
    Auto-check passed
  • Coverage Analysis

    runceel/ReactiveProperty

    Automated, project-wide code coverage and CRAP (Change Risk Anti-Patterns) score analysis for .NET projects with existing unit tests.

    944 GitHub stars~5.9k tokensUpdated 1 mo ago
    Auto-check: warnings
  • Development Workflow

    runceel/ReactiveProperty

    ReactiveProperty repository development policy. An agent skill from runceel/ReactiveProperty.

    944 GitHub stars~1.4k tokensUpdated 1 mo ago
    Auto-check passed
  • Migrate Vstest To Mtp

    runceel/ReactiveProperty

    Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).

    944 GitHub stars~4.3k tokensUpdated 1 mo ago
    Auto-check passed
  • Releasing Reactiveproperty

    runceel/ReactiveProperty

    Release the ReactiveProperty NuGet package set from this repository.

    944 GitHub stars~2.7k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Categories

Questions about Dotnet10 Features

What does Dotnet10 Features do?

Reference for the .NET 10 / C 14 features that are relevant to the ReactiveProperty repository. Dotnet10 Features is an agent skill from runceel/ReactiveProperty.NET 10 / C 14 features that are relevant to the ReactiveProperty repository.

When should I use Dotnet10 Features?

Dotnet10 Features fits situations like: include mentions of .NET 10; extension members; blazor net10 work in this repo.

How do I install Dotnet10 Features in Claude Code?

Run `npx skills add runceel/ReactiveProperty --skill dotnet10-features -a claude-code`. Or copy the skill folder (.github/skills/dotnet10-features in runceel/ReactiveProperty) into .claude/skills/dotnet10-features in your project. Claude Code loads it when a task matches its description.

How do I install Dotnet10 Features in Codex?

Run `npx skills add runceel/ReactiveProperty --skill dotnet10-features -a codex`. Or copy the skill folder (.github/skills/dotnet10-features in runceel/ReactiveProperty) into .agents/skills/dotnet10-features in your project. Codex loads it when a task matches its description.

Can I use Dotnet10 Features in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add runceel/ReactiveProperty --skill dotnet10-features -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dotnet10-features, .gemini/skills/dotnet10-features, .github/skills/dotnet10-features and .opencode/skills/dotnet10-features in your project.

What does Dotnet10 Features need to run?

SKILL.md names no scripts, command-line tools or credentials: Dotnet10 Features is instructions for the agent only.

Does Dotnet10 Features access the network?

SKILL.md names 1 domain. As links in the text: learn.microsoft.com. This is read from the text; nothing was executed.

Is Dotnet10 Features safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Dotnet10 Features use?

Dotnet10 Features is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dotnet10 Features use?

About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Dotnet10 Features?

Skills that share tags, products or a category with Dotnet10 Features: Add Refactoring (dotnet/roslynator, 3.5k stars), Dynamo Dotnet Expert (DynamoDS/Dynamo, 2k stars), Deprecate Analyzer Or Refactoring (dotnet/roslynator, 3.5k stars) and Okojo Test262 (akeit0/okojo, 160 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dotnet10 Features?

runceel (a GitHub user) maintains it in runceel/ReactiveProperty, which has 944 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on August 31, 2026.

Source: runceel/ReactiveProperty on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.