ワンクリックで
csharp-dotnet10
C# 14 / .NET 10 の最新文法に基づいてコードを生成・レビュー・リファクタリングするスキル。 C# のコード生成、レビュー、リファクタリング、新規ファイル作成時に使用すること。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
C# 14 / .NET 10 の最新文法に基づいてコードを生成・レビュー・リファクタリングするスキル。 C# のコード生成、レビュー、リファクタリング、新規ファイル作成時に使用すること。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
.NET 10 file-based apps を使ったスクリプト実行スキル。Copilot がデータ処理・ファイル操作・簡易ツールなどの スクリプト的な処理を行う際に、C# の file-based app として実行する方法を定義する。 使い捨ての処理はファイルを作成せず stdin パイプで実行し、再利用可能な処理のみ .cs ファイルとして保存すること。
ASP.NET Core Blazor (.NET 10) の最新機能・ベストプラクティスに基づいてコンポーネントやページを生成・レビュー・リファクタリングするスキル。 Blazor コンポーネント、ページ、レイアウト、JS interop、フォームバリデーション、状態管理の実装時に使用すること。
クリーンアーキテクチャに基づく設計指針スキル。プロジェクト構成、レイヤー分離、依存関係の方向、テスタビリティ確保の原則を定義する。 新規プロジェクト作成、機能追加、リファクタリング、テスト作成時に使用すること。
SOC 職業分類に基づく
| name | csharp-dotnet10 |
| description | C# 14 / .NET 10 の最新文法に基づいてコードを生成・レビュー・リファクタリングするスキル。 C# のコード生成、レビュー、リファクタリング、新規ファイル作成時に使用すること。 |
あなたは C# 14 (.NET 10) のエキスパートである。 C# 14 の最新文法を必ず使え。旧来の書き方は禁止。
ターゲットは net10.0。file-scoped namespace、Nullable enable、ImplicitUsings enable を前提とする。
extension ブロックで拡張プロパティ・拡張メソッド・静的拡張メンバー・演算子を定義する。
従来の this パラメーター拡張メソッドは使うな。
public static class Enumerable
{
extension<TSource>(IEnumerable<TSource> source)
{
// 拡張プロパティ
public bool IsEmpty => !source.Any();
// 拡張メソッド
public IEnumerable<TSource> Where(Func<TSource, bool> predicate) { ... }
}
extension<TSource>(IEnumerable<TSource>)
{
// 静的拡張メソッド
public static IEnumerable<TSource> Combine(IEnumerable<TSource> first, IEnumerable<TSource> second) { ... }
// 静的拡張プロパティ
public static IEnumerable<TSource> Identity => Enumerable.Empty<TSource>();
// ユーザー定義演算子
public static IEnumerable<TSource> operator +(IEnumerable<TSource> left, IEnumerable<TSource> right) => left.Concat(right);
}
}
レシーバー名ありブロック = インスタンス拡張、レシーバー名なしブロック = 静的拡張。
field キーワード (Field-backed Properties)プロパティのアクセサー内で field トークンを使い、コンパイラ生成バッキングフィールドを参照する。
手動バッキングフィールド (private string _msg;) は不要。
// ❌ 旧
private string _msg;
public string Message { get => _msg; set => _msg = value ?? throw new ArgumentNullException(nameof(value)); }
// ✅ 新
public string Message
{
get;
set => field = value ?? throw new ArgumentNullException(nameof(value));
}
既存コードに field という名前のシンボルがある場合は @field または this.field で区別する。
?. / ?[] を代入の左辺に使える。右辺は左辺が null でない場合のみ評価される。
// ❌ 旧
if (customer is not null) { customer.Order = GetCurrentOrder(); }
// ✅ 新
customer?.Order = GetCurrentOrder();
複合代入 (+=, -= 等) も可。ただし ++ / -- は不可。
ラムダパラメーターに型を指定せず scoped, ref, in, out, ref readonly 修飾子を付けられる。
// ❌ 旧 (型の指定が必要だった)
TryParse<int> parse = (string text, out int result) => int.TryParse(text, out result);
// ✅ 新
TryParse<int> parse = (text, out result) => int.TryParse(text, out result);
params 修飾子のみ明示的な型付きパラメーターリストが必要。
Span<T>, ReadOnlySpan<T>, T[] 間の暗黙変換をサポート。
拡張メソッドのレシーバーにも使え、ジェネリック型推論にも対応。
パフォーマンス重視のコードでは Span<T> を積極的に使え。
nameof と Unbound Generic Typesnameof(List<>) // → "List" (C# 14 で許可)
インスタンスコンストラクターとイベントを partial として宣言可能。
定義宣言と実装宣言の2つが必要。コンストラクター初期化子 (this() / base()) は実装宣言のみ。
primary constructor 構文は1つの partial 型宣言のみ。
型に +=, -= などの複合代入演算子と ++ / -- をユーザー定義できる。
| 機能 | 使い方 |
|---|---|
| Primary constructors | public class Svc(IDep dep); — コンストラクター DI に使う |
| Collection expressions | int[] a = [1, 2, 3]; — new List<T>{...} は禁止 |
| Raw string literals | """...""" — 複数行・エスケープ多用時に使う |
| Required members | required で初期化を強制 |
| Record types | DTO・不変データに record / record struct |
| Pattern matching | switch 式、リスト・プロパティパターンを活用 |
| Target-typed new | 型が明確なら new() |
| Global using | 共通 using は GlobalUsings.cs にまとめる |
params コレクション | params ReadOnlySpan<T> 等を活用 |
async/await 必須。Async サフィックス。Task.Result/Task.Wait() 禁止。$"..." 必須。string.Format / + 連結禁止。var 積極使用。is null / is not null パターン。== null / != null 禁止。ArgumentNullException.ThrowIfNull(), ArgumentException.ThrowIfNullOrEmpty() を使う。IAsyncEnumerable<T> を使う。catch ... when (...) を活用。NuGet・プロジェクト作成・ソリューション管理・参照追加は全て dotnet CLI で行う。.csproj / .slnx の手動編集禁止。
dotnet new <template>
dotnet sln add/remove <project>
dotnet add package <pkg>
dotnet add reference <project>
namespace X { } → namespace X;public static T Method(this T x) → extension(T x) { } ブロックprivate string _field; → field キーワードnew List<T>() → []string.Format() → $"..."Task.Result / .Wait() → await== null / != null → is null / is not nullif (x != null) x.Prop = v; → x?.Prop = v;