Skip to main content

dotnet10

Provides up-to-date information about .NET 10 and C# 14 new features for C# developers. Use when the user asks about .NET 10 capabilities, C# 14 language features, ASP.NET Core 10 Blazor, EF Core 10, or needs guidance on .NET 10/C# 14 specific features.

Informações da origem

Repositório
runceel/ai-dev-template
Última atividade na origem
24 de abril de 2026 às 02:50
Idioma detectado do SKILL.md
inglês
Estrelas
11
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
dotnet10
description
Provides up-to-date information about .NET 10 and C# 14 new features for C# developers. Use when the user asks about .NET 10 capabilities, C# 14 language features, ASP.NET Core 10 Blazor, EF Core 10, or needs guidance on .NET 10/C# 14 specific features.
# .NET 10 & C# 14 Reference for C# Developers Source: https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/overview .NET 10 is an **LTS (Long-Term Support)** release. C# 14 ships with .NET 10. --- ## C# 14 Reference: https://learn.microsoft.com/dotnet/csharp/whats-new/csharp-14 ### Extension Members (`extension` blocks) New syntax for extension properties, static extension members, and user-defined operators as extensions: ```csharp public static class MyExtensions { // Instance extension members extension<TSource>(IEnumerable<TSource> source) { public bool IsEmpty => !source.Any(); public IEnumerable<TSource> Where(Func<TSource, bool> predicate) { ... } } // Static extension members and operators extension<TSource>(IEnumerable<TSource>) { public static IEnumerable<TSource> Empty => Enumerable.Empty<TSource>(); public static IEnumerable<TSource> operator +(IEnumerable<TSource> left, IEnumerable<TSource> right) => left.Concat(right); } } // Usage var empty = sequence.IsEmpty; // instance extension property var id = IEnumerable<int>.Empty; // static extension property var combined = list1 + list2; // extension operator ``` ### Field-Backed Properties (`field` keyword) Access the compiler-generated backing field using `field`: ```csharp // Before C# 14 private string _name; public string Name { get => _name; set => _name = value?.Trim() ?? throw new ArgumentNullException(nameof(value)); } // C# 14 public string Name { get; set => field = value?.Trim() ?? throw new ArgumentNullException(nameof(value)); } ``` Use `@field` or `this.field` to disambiguate if a member named `field` exists. ### Implicit `Span<T>` / `ReadOnlySpan<T>` Conversions First-class support for `Span<T>` and `ReadOnlySpan<T>`: - New implicit conversions between `Span<T>`, `ReadOnlySpan<T>`, and `T[]` - Span types can be extension method receivers - Compose with other conversions and improve generic type inference ### `nameof` with Unbound Generic Types ```csharp nameof(List<>) // "List" nameof(Dictionary<,>) // "Dictionary" ``` ### Lambda Parameter Modifiers Without Types ```csharp delegate bool TryParse<T>(string text, out T result); // C# 14: modifiers without type annotation TryParse<int> parse = (text, out result) => Int32.TryParse(text, out result); // Before C# 14: types required TryParse<int> parse = (string text, out int result) => Int32.TryParse(text, out result); ``` Supported modifiers: `scoped`, `ref`, `in`, `out`, `ref readonly`. (`params` still requires typed parameters.) ### Partial Constructors and Partial Events ```csharp // Partial constructor public partial class MyService { public partial MyService(ILogger<MyService> logger); // defining declaration } public partial class MyService { private readonly ILogger<MyService> _logger; public partial MyService(ILogger<MyService> logger) // implementing declaration { _logger = logger; } } // Partial event public partial class MyComponent { public partial event EventHandler Clicked; // defining (field-like) } public partial class MyComponent { public partial event EventHandler Clicked // implementing { add => _clicked += value; remove => _clicked -= value; } } ``` ### Null-Conditional Assignment ```csharp // Before C# 14 if (customer is not null) customer.Order = GetCurrentOrder(); // C# 14 customer?.Order = GetCurrentOrder(); // right side evaluated only when left is not null customer?.Total += discount; // compound assignment also supported // Note: ++ and -- are NOT allowed ``` ### User-Defined Compound Assignment and Increment/Decrement Operators ```csharp public static MyVector operator +=(MyVector left, MyVector right) => new(left.X + right.X, left.Y + right.Y); public static MyCounter operator ++(MyCounter c) => new(c.Value + 1); public static MyCounter operator --(MyCounter c) => new(c.Value - 1); ``` --- ## .NET Libraries (New APIs) Reference: https://learn.microsoft.com/dotnet/core/whats-new/dotnet-10/libraries ### JSON Serialization (`System.Text.Json`) - Disallow duplicate properties option - Strict serialization settings - `PipeReader` support for stream-based deserialization ### Post-Quantum Cryptography - Windows CNG support - ML-DSA: simplified APIs, HashML-DSA, Composite ML-DSA ### Cryptography - AES KeyWrap with Padding (`AesKeyWrapPad`) ### Networking - `WebSocketStream`: wraps `WebSocket` as a `Stream` - TLS 1.3 support for macOS clients ### Process Management - Windows process group support (`CreateJobObject`-based signal isolation) --- ## .NET SDK - **`dotnet test`** supports Microsoft.Testing.Platform - **One-shot tool execution**: `dotnet tool exec <tool>` — run without installing globally - **`dnx` script**: shorthand for `dotnet tool exec` (`dnx dotnetsay "Hello"`) - Console apps can **natively create container images** (no Docker required) - Configurable container image format via MSBuild property - Platform-specific .NET tools (self-contained, trimmed, AOT per RID in one package) --- ## ASP.NET Core 10 / Blazor Reference: https://learn.microsoft.com/aspnet/core/release-notes/aspnetcore-10.0 ### Identity / Security - **Passkey (WebAuthn/FIDO2)** support in ASP.NET Core Identity — password-less login, built into the Blazor Web App template ### Blazor - **`[PersistentState]` attribute**: Declarative prerendering state persistence for components and services ```csharp [PersistentState] private MyData? Data { get; set; } ``` - **Improved form validation**: Validates nested object properties and collection items - Opt in: `AddValidation()` in DI + `[ValidatableType]` on root model - **Circuit state persistence**: Server-side Blazor session survives connection loss - **Hot Reload for Blazor WebAssembly**: `WasmEnableHotReload` MSBuild property (default `true` for Debug) - **New JS interop APIs**: - Create JS object instances via constructor function - Read/modify JS object property values - **`<ResourcePreloader />`** component for WebAssembly asset preloading - **`QuickGrid` `RowClass` parameter**: Apply CSS class per row based on row item - `NavigateTo` no longer scrolls to top on same-page navigation - `NavLink` ignores query string/fragment with `NavLinkMatch.All` - `BlazorDisableThrowNavigationException` MSBuild property to suppress `NavigationException` during static SSR ### OpenAPI - Form data enum parameters use actual enum type (not `string`) - `GetOrCreateSchemaAsync` in transformers to generate `OpenApiSchema` from C# types - Endpoint-specific operation transformers - Cross-assembly XML doc comment support --- ## EF Core 10 Reference: https://learn.microsoft.com/ef/core/what-is-new/ef-core-10.0/whatsnew - LINQ enhancements (more queries translate to SQL) - Performance optimizations - Improved Azure Cosmos DB support - **Named query filters**: Assign names to query filters; selectively disable per query ```csharp // Configuration modelBuilder.Entity<Post>().HasQueryFilter("SoftDelete", p => !p.IsDeleted); modelBuilder.Entity<Post>().HasQueryFilter("TenantFilter", p => p.TenantId == currentTenantId); // Selectively ignore context.Posts.IgnoreQueryFilters("SoftDelete").ToList(); ```
Ver no GitHub