plugins/languages/csharp/skills/core/SKILL.md
C# 14 / .NET 10 LTS 核心开发规范。覆盖 nullable reference types、pattern matching、 primary constructors、collection expressions、params collections、field keyword、 ref struct interfaces、Roslyn analyzers 与 dotnet-format 配置。 当用户新建 .NET 项目、审查 C# 代码、配置 csproj、启用 nullable、调整 LangVersion, 或说 "C# 规范"、"现代 C#"、"C# 14"、".NET 10"、"nullable"、"primary constructor"、 "collection expression"、"dotnet format" 时加载, 是所有 C# skill 的基础依赖。
npx skillsauth add lazygophers/ccplugin csharp-coreInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
C# 14 + .NET 10 LTS 是当前主线 (LTS 至 2028-11)。任何 C# 文件改动必须先比对本规范。
新项目 .csproj 必须显式声明:
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<AnalysisLevel>latest-all</AnalysisLevel>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
仓库根放 .editorconfig + Directory.Build.props, 统一 LangVersion 与分析等级。
PascalCase 类型/方法/属性/常量; camelCase 局部变量与参数; 私有字段 _camelCaseAsync 结尾, 同时暴露 CancellationTokennamespace Foo;| 特性 | 用法 | 取代 |
|------|------|------|
| Primary constructors | public class Svc(IDb db) | 显式构造器 + 字段赋值 |
| Collection expressions | int[] x = [1, 2, 3]; | new int[] {1,2,3} |
| Spread | int[] all = [..a, ..b]; | Concat + ToArray |
| Params collections | void F(params ReadOnlySpan<int> xs) | params int[] 堆分配 |
| field keyword | get; set => field = value?.Trim(); | 显式 backing field |
| Ref struct interfaces | ref struct Buf : IDisposable | 无 |
| Escape \e | "\e[31mred" | "\x1b[31mred" |
| required 成员 | public required string Name { get; init; } | 构造器强制 |
| Lock 类型 | private readonly Lock _gate = new(); | lock(object) |
| using 别名任意类型 | using Point = (int X, int Y); | 无 |
#nullable disable; 例外需 PR 注释说明?; 内部不靠 ! (null-forgiving) 兜底NullReferenceException; 从源头消除ArgumentNullException.ThrowIfNull(x) 优于手写判空优先 switch expression + property pattern:
public decimal Discount(Customer c) => c switch
{
{ Tier: "vip", Age: > 60 } => 0.3m,
{ Tier: "vip" } => 0.2m,
{ Orders.Count: > 10 } => 0.1m,
_ => 0m
};
record / record struct + initwith 表达式产生副本IReadOnlyList<T> / ImmutableArray<T> 暴露IOptions<T> 管理配置; ILogger<T> 结构化日志[FromKeyedServices("k")]bool TryX(out) / 结果类型catch (Exception) 后无日志)Exception, 提供三个标准构造器<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.*" />
<PackageReference Include="Roslynator.Analyzers" Version="4.*" PrivateAssets="all" />
<PackageReference Include="StyleCop.Analyzers" Version="1.2.*" PrivateAssets="all" />
CI 强制:
dotnet format --verify-no-changes --severity warn
dotnet build /warnaserror
<IsAotCompatible>true</IsAotCompatible>Activator.CreateInstance(string) 反射构造泛型; 用 source generatorSystem.Text.Json source generator (JsonSerializerContext).Result / .Wait() (详见 csharp-async)async void 除 event handler 外一律禁止INotifyPropertyChanged 模板 (用 CommunityToolkit.Mvvm)tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。