困りごとから探すときは上の表、公開済を一覧で追うときは公開済リンクが使えます。
このページは『C#達人への道』のIndexです。
困りごとから次の 1 本を探すときと、公開済の記事を一覧で追うときに使えます。
先に使う場所は次の 3 つです。
- 困りごとがあるときはこの表
- まず開く 3 本
- 公開済リンク
困りごとがあるときはこの表
近い症状の行からたどれます。
| いまの状況 | まず読む | 次に読む |
|---|---|---|
| UIが固まる/止まる | E04 | G11 / G13 / R06 |
WinForms 応答なしで .Result / .Wait / Invoke が怪しい |
E03 | E04 / G13 |
| NuGetや参照が壊れた | E02 | K27 / R01 |
| Nullで落ちる/条件がぶれる | R09 | R01 / R04 |
| 返ってこない/待ち続ける | R10 | R06 / R05 |
| SaveChangesしても反映されない | E08 | E09 |
| 時間がズレる/タイムゾーンが合わない | G22 | — |
| 画像やファイルが使用中になる | R11 | R07 / R12 / G10 |
文字列が一致しない/Contains が怪しい |
R03 | K33 / K39 |
| 常駐アプリが終わらない/戻せない | G19 | R07 / G10 |
| WinFormsの挙動が読みにくい | G10 | G12 / G16 / G17 |
| IMEが壊れる/確定が飛ぶ | E05 | G14 |
| Win32 APIで突然終了する | E06 | G12 |
| 外部通知が不安定 | E07 | R05 / K27 |
| 画像の形式で迷う/にじむ/重い | K31 | R11 / R12 |
| LINQの動きが追いにくい | K35 | K36 |
| C#が遅いが原因がまだ見えない | K38 | K36 / K33 |
| イベント解除漏れ/二重発火/メモリリークが怪しい | K37 | R07 / G10 |
List / Dictionary / HashSet の使い分けで止まる |
K39 | K33 / R03 |
| ファイル変更を監視したい | W01 | W02 / R05 |
| 共有フォルダの更新者を追いたい | W02 | W01 / R05 |
using / Dispose / SafeHandle の責務で揉める |
R12 | R07 / R11 |
まず開く 3 本
迷ったときは、ここから入ると全体を追いやすくなります。
- S02:C#/.NET トラブルシュート早見表|まず疑う順(固まる/落ちる/遅い/参照切れ)【S02】
- E04:WinForms UIが固まる原因|重い処理 / Task.Run / .Wait / Invoke を画面で切り分けるサンプル【救急E04】
- R01:コーディング規約の基準(C#)|命名/例外/ログ/依存関係【掟R01】
よく開かれている記事
まず数本読みたいときは、このあたりから入れます。
- K36:C# LINQ(to Object)が遅くなる原因5選(ToList / OrderBy / Contains / Skip / 二重列挙)【鍛錬K36】
- K26:C# ラムダ式入門|Action/Func/delegate とクロージャ失敗パターン3選(ループ変数・イベント解除・async void)【鍛錬K26】
- K35:C# LINQ サンプル集|Where/Select/GroupBy/Join(実行結果つき)【鍛錬K35】
- K38:C#が遅い原因の切り分け(30秒診断)|GC(ガベージコレクション)だけを疑わない:割り当て×寿命×サイズで最短特定【保存版】【鍛錬K38】
- K39:10万件実測 C# List / Dictionary / HashSet の使い分け|Contains・検索・更新【鍛錬K39】
公開済リンク
公開済の記事だけをカテゴリ別に並べています。
新しい記事はここへ追加していきます。
S:門前
- S00: C#達人への道 連載Index|読む順・公開記事一覧|鍛錬・掟・外伝・救急Tips・工房
- S01: C#/.NET 用語集|現場で詰まりやすい用語(随時更新)
- S02: C#/.NET トラブルシュート早見表|まず疑う順(固まる/落ちる/遅い/参照切れ)
E:現場救急Tips
- E02: NuGet 競合で参照が壊れる原因|依存関係の切り分けと対処
- E03: WinForms 応答なしの原因|.Result/.Wait/Invoke の切り分け
- E04: WinForms UIが固まる原因|重い処理 / Task.Run / .Wait / Invoke を画面で切り分けるサンプル
- E05: WinForms IME不具合の切り分け|確定が飛ぶ/文字が消える原因
- E06: 突然終了の原因|PInvoke/WndProc/Handle寿命 のチェック(WinForms)
- E07: Webhook 送信失敗の原因|プロキシ/タイムアウト/リトライ(HttpClient)
- E08: EF Core SaveChanges が反映されない原因(Web)|追跡/状態/トランザクション
- E09: EF Core SaveChanges が反映されない原因|追跡/状態/DbContext の確認点
R:掟
- R01: コーディング規約の基準(C#)|命名/例外/ログ/依存関係
- R02: C# var はどこまで使うか|new は var、戻り値は型を書く
- R03: C#で
ToLower()をEqualsに直したのに、ContainsとDictionaryは大文字小文字を無視してくれない - R04: 例外設計の基準(C#)|空catch/throw;/InnerException
- R05: ILogger ログ設計の基準(C#)|調査しやすい粒度とキー
- R06: C# 非同期処理の基準|UIスレッド/await/デッドロックを避ける判断軸
- R07: WinFormsで閉じたあとも残る原因|Load・Shown・Closing・Closed・Dispose の役割分担
- R09: NullReferenceException 対策|nullable と Guard の基準
- R10: C# タイムアウトとキャンセル設計|Task.WhenAny と CancellationToken の使い分け
- R11: WinFormsで「別のプロセスが使用中です」の原因になりやすい所|Stream・ファイル出力・ログ・別処理
- R12: C#でDispose責務をレビューで止める5ルール|using・DI・Finalize・SafeHandle
- R14: discard _ の基準(C#)|out/戻り値/タプル分解/switch
K:鍛錬
- K26: C# ラムダ式入門|Action/Func/delegate とクロージャ失敗パターン3選(ループ変数・イベント解除・async void)
- K27: 参照依存の整理(C#)|依存方向/境界/配布単位(NuGet)
- K28: C#で float / double / decimal を迷わず選ぶ|金額はdecimal、通常はdouble
- K29: 設定・データ形式の使い分け(C#)|CSV/JSON/XML/YAML/INI
- K30: 設定ファイル互換性の守り方(C#)|版数/後方互換/入力防御(JSON)
- K31: PNG/JPG/SVG/BMP 使い分け|画像形式の判断軸(C#)
- K33: C# 文字列操作 早見表|Contains/Replace/Split/Join/Regex/StringComparison
- K35: C# LINQ サンプル集|Where/Select/GroupBy/Join(実行結果つき)
- K36: C# LINQ(to Object)が遅くなる原因5選(ToList / OrderBy / Contains / Skip / 二重列挙)
- K37: イベント購読トラブル7チェック|解除漏れ/二重発火/メモリリーク(C#)
- K38: C#が遅い原因の切り分け(30秒診断)|GC(ガベージコレクション)だけを疑わない:割り当て×寿命×サイズで最短特定【保存版】
- K39: 10万件実測 C# List / Dictionary / HashSet の使い分け|Contains・検索・更新
G:外伝
- G10: WinForms Formライフサイクル整理|ctor/Load/Shown/Closing/Dispose の順と落とし穴
- G11: WinFormsが固まる理由|Application.Run とメッセージループ入門
- G12: WndProc 入門|WM_* と DefWndProc を壊さない WinForms/Win32 メッセージ処理
- G13: C# async/await でUIが固まる理由|同期コンテキストとデッドロック
- G14: WinForms IME表示位置ずれの原因|キャレット矩形/TSF/IMM32/DPI
- G15: WinForms デザイナが落ちる原因|継承コントロールで詰まりやすい初期化・保存・TypeConverter
- G16: WinForms 通知ウィンドウ設計|TopMost/SetWindowPos/Zオーダー
- G17: WinForms ホットキー実装|RegisterHotKey/UnregisterHotKey の要点
- G19: NotifyIcon トレイ常駐アプリ設計|×は隠す/トレイで終了(Hide/Restore/Dispose)
- G21: C# 文字化けした時はここだけ見る|先頭だけ変=BOM、全部崩れる=文字コード違い、桁数ずれ=byte数
- G22: DateTime がずれる原因|UTC/Offset/TimeZone/DateTimeOffset の整理
- G23: TCPとUDPの違い|接続/ポート/再送/用途(Slack・IPMsg・オンラインゲーム)
- G25: MVC/MVP/MVVM の違いと使い分け|WinForms/WPF で役割を整理
- G26: Fat Controller を避ける Controller 設計|MVCで分ける判断軸
W:工房
- W01: C#でファイル変更を監視したいときの基本|FileSystemWatcher、共有フォルダ、サブフォルダ、WinForms
- W02: C#で共有フォルダの更新者を追う方法|FileSystemWatcherだけでは分からない情報を4663/4660で補う
前提
| 項目 | 前提 |
|---|---|
| OS | Windows 10/11 |
| .NET | .NET 8(Windows Desktop) |
| TargetFramework | net8.0-windows |
| UI | WinForms |
| IDE | Visual Studio 2022 |
| C# | C# 12 |
本文は .NET 8 / WinForms / net8.0-windows を前提にしています。
差が大きい場面だけ .NET Framework 4.8 を書き足しています。
記号の意味
記事IDの先頭 1 文字でカテゴリを分けています。
| 記号 | カテゴリ | 何があるか |
|---|---|---|
| S | 門前 | 導入と前提整理 |
| E | 救急 | 症状から探しやすい記事 |
| R | 掟 | 判断基準をまとめた記事 |
| K | 鍛錬 | 基本と失敗パターンの記事 |
| G | 外伝 | 仕組みを深く扱う記事 |
| W | 工房 | 実装と運用を寄せてまとめた記事 |
ラインナップ
この一覧には、公開前の記事も入っています。
リンクがあるものは公開済、ないものは準備中です。
S:門前
| ID | タイトル | 状態 |
|---|---|---|
| S00 | C#達人への道 連載Index|読む順・公開記事一覧|鍛錬・掟・外伝・救急Tips・工房【S00】 | ✓ |
| S01 | C#/.NET 用語集|現場で詰まりやすい用語(随時更新)【S01】 | ✓ |
| S02 | C#/.NET トラブルシュート早見表|まず疑う順(固まる/落ちる/遅い/参照切れ)【S02】 | ✓ |
E:現場救急Tips
| ID | タイトル | 状態 |
|---|---|---|
| E01 | 乞うご期待 | … |
| E02 | NuGet 競合で参照が壊れる原因|依存関係の切り分けと対処【救急E02】 | ✓ |
| E03 | WinForms 応答なしの原因|.Result/.Wait/Invoke の切り分け【救急E03】 | ✓ |
| E04 | WinForms UIが固まる原因|重い処理 / Task.Run / .Wait / Invoke を画面で切り分けるサンプル【救急E04】 | ✓ |
| E05 | WinForms IME不具合の切り分け|確定が飛ぶ/文字が消える原因【救急E05】 | ✓ |
| E06 | 突然終了の原因|PInvoke/WndProc/Handle寿命 のチェック(WinForms)【救急E06】 | ✓ |
| E07 | Webhook 送信失敗の原因|プロキシ/タイムアウト/リトライ(HttpClient)【救急E07】 | ✓ |
| E08 | EF Core SaveChanges が反映されない原因(Web)|追跡/状態/トランザクション【救急E08】 | ✓ |
| E09 | EF Core SaveChanges が反映されない原因|追跡/状態/DbContext の確認点【救急E09】 | ✓ |
| E10 | 参照地獄の発火点:公開API / バージョン / 配布差の失敗パターン | … |
| E11 | 回帰を止める:失敗パターン別のテストと運用の最短整備 | … |
R:掟
| ID | タイトル | 状態 |
|---|---|---|
| R01 | コーディング規約の基準(C#)|命名/例外/ログ/依存関係【掟R01】 | ✓ |
| R02 | C# var はどこまで使うか|new は var、戻り値は型を書く【掟R02】 | ✓ |
| R03 | C#でToLower() を Equals に直したのに、Contains と Dictionary は大文字小文字を無視してくれない【掟R03】 |
✓ |
| R04 | 例外設計の基準(C#)|空catch/throw;/InnerException【掟R04】 | ✓ |
| R05 | ILogger ログ設計の基準(C#)|調査しやすい粒度とキー【掟R05】 | ✓ |
| R06 | C# 非同期処理の基準|UIスレッド/await/デッドロックを避ける判断軸【掟R06】 | ✓ |
| R07 | WinFormsで閉じたあとも残る原因|Load・Shown・Closing・Closed・Dispose の役割分担【掟R07】 | ✓ |
| R08 | 乞うご期待 | … |
| R09 | NullReferenceException 対策|nullable と Guard の基準【掟R09】 | ✓ |
| R10 | C# タイムアウトとキャンセル設計|Task.WhenAny と CancellationToken の使い分け【掟R10】 | ✓ |
| R11 | WinFormsで「別のプロセスが使用中です」の原因になりやすい所|Stream・ファイル出力・ログ・別処理【掟R11】 | ✓ |
| R12 | C#でDispose責務をレビューで止める5ルール|using・DI・Finalize・SafeHandle【掟R12】 | ✓ |
| R13 | 乞うご期待 | … |
| R14 | discard _ の基準(C#)|out/戻り値/タプル分解/switch【掟R14】 | ✓ |
K:鍛錬
| ID | タイトル | 状態 |
|---|---|---|
| K21 | 乞うご期待 | … |
| K26 | C# ラムダ式入門|Action/Func/delegate とクロージャ失敗パターン3選(ループ変数・イベント解除・async void)【鍛錬K26】 | ✓ |
| K27 | 参照依存の整理(C#)|依存方向/境界/配布単位(NuGet)【鍛錬K27】 | ✓ |
| K28 | C#で float / double / decimal を迷わず選ぶ|金額はdecimal、通常はdouble【鍛錬K28】 | ✓ |
| K29 | 設定・データ形式の使い分け(C#)|CSV/JSON/XML/YAML/INI【鍛錬K29】 | ✓ |
| K30 | 設定ファイル互換性の守り方(C#)|版数/後方互換/入力防御(JSON)【鍛錬K30】 | ✓ |
| K31 | PNG/JPG/SVG/BMP 使い分け|画像形式の判断軸(C#)【鍛錬K31】 | ✓ |
| K33 | C# 文字列操作 早見表|Contains/Replace/Split/Join/Regex/StringComparison【鍛錬K33】 | ✓ |
| K35 | C# LINQ サンプル集|Where/Select/GroupBy/Join(実行結果つき)【鍛錬K35】 | ✓ |
| K36 | C# LINQ(to Object)が遅くなる原因5選(ToList / OrderBy / Contains / Skip / 二重列挙)【鍛錬K36】 | ✓ |
| K37 | イベント購読トラブル7チェック|解除漏れ/二重発火/メモリリーク(C#)【鍛錬K37】 | ✓ |
| K38 | C#が遅い原因の切り分け(30秒診断)|GC(ガベージコレクション)だけを疑わない:割り当て×寿命×サイズで最短特定【保存版】【鍛錬K38】 | ✓ |
| K39 | 10万件実測 C# List / Dictionary / HashSet の使い分け|Contains・検索・更新【鍛錬K39】 | ✓ |
G:外伝
| ID | タイトル | 状態 |
|---|---|---|
| G10 | WinForms Formライフサイクル整理|ctor/Load/Shown/Closing/Dispose の順と落とし穴【外伝G10】 | ✓ |
| G11 | WinFormsが固まる理由|Application.Run とメッセージループ入門【外伝G11】 | ✓ |
| G12 | WndProc 入門|WM_* と DefWndProc を壊さない WinForms/Win32 メッセージ処理【外伝G12】 | ✓ |
| G13 | C# async/await でUIが固まる理由|同期コンテキストとデッドロック【外伝G13】 | ✓ |
| G14 | WinForms IME表示位置ずれの原因|キャレット矩形/TSF/IMM32/DPI【外伝G14】 | ✓ |
| G15 | WinForms デザイナが落ちる原因|継承コントロールで詰まりやすい初期化・保存・TypeConverter【外伝G15】 | ✓ |
| G16 | WinForms 通知ウィンドウ設計|TopMost/SetWindowPos/Zオーダー【外伝G16】 | ✓ |
| G17 | WinForms ホットキー実装|RegisterHotKey/UnregisterHotKey の要点【外伝G17】 | ✓ |
| G18 | 多重起動制御:Mutex/既存インスタンス前面化 | … |
| G19 | NotifyIcon トレイ常駐アプリ設計|×は隠す/トレイで終了(Hide/Restore/Dispose)【外伝G19】 | ✓ |
| G20 | SendMessageとPostMessage:同期/非同期の違い | … |
| G21 | C# 文字化けした時はここだけ見る|先頭だけ変=BOM、全部崩れる=文字コード違い、桁数ずれ=byte数【外伝G21】 | ✓ |
| G22 | DateTime がずれる原因|UTC/Offset/TimeZone/DateTimeOffset の整理【外伝G22】 | ✓ |
| G23 | TCPとUDPの違い|接続/ポート/再送/用途(Slack・IPMsg・オンラインゲーム)【外伝G23】 | ✓ |
| G24 | P2P:NAT越え/STUN/TURN/リレー | … |
| G25 | MVC/MVP/MVVM の違いと使い分け|WinForms/WPF で役割を整理【外伝G25】 | ✓ |
| G26 | Fat Controller を避ける Controller 設計|MVCで分ける判断軸【外伝G26】 | ✓ |
| G27 | 乞うご期待 | … |
W:工房
| ID | タイトル | 状態 |
|---|---|---|
| W01 | C#でファイル変更を監視したいときの基本|FileSystemWatcher、共有フォルダ、サブフォルダ、WinForms【工房W01】 | ✓ |
| W02 | C#で共有フォルダの更新者を追う方法|FileSystemWatcherだけでは分からない情報を4663/4660で補う【工房W02】 | ✓ |
このIndexの使い方
困りごとから探すときは、上の表からたどれます。
公開済だけ追いたいときは、公開済リンクが早いです。
公開前を含めた全体像は、ラインナップにまとめています。
最初に開かれやすいテーマは、いまのところ UIフリーズです。
- E04:WinForms UIが固まる原因|重い処理 / Task.Run / .Wait / Invoke を画面で切り分けるサンプル【救急E04】
- G11:WinFormsが固まる理由|Application.Run とメッセージループ入門【外伝G11】
- G13:C# async/await でUIが固まる理由|同期コンテキストとデッドロック【外伝G13】
- R06:C# 非同期処理の基準|UIスレッド/await/デッドロックを避ける判断軸【掟R06】
謝辞(O’Reilly/オライリー風)(読みたい人だけ)
この連載は、目に見える協力者と、目に見えない協力者と、そして「見えないふりをしている協力者」たちの力で成立しています。
まず、部屋のホコリと、キーボードの隙間に挟まった謎の白い粉に感謝します。
その存在があるからこそ、私は定期的に掃除をし、結果として思考も整理されます。
次に、地球上の全ての生物に感謝します。だいたい全部です。
見えないものほど、あとから効いてくる。開発も同じです。
前提と依存を疑う。これをプログラマの義務教育と呼びます。
そして、終わらない締切、終わらないリビルド、終わらない「ちょっとだけ直す」、終わらない確認にも感謝します。
夜は静かで、朝は眩しく、昼は眠く、夕方は焦る。全部セットで、なぜか仕事は進みます。
ドはまりした案件ほど、人は鍛えられて、設計と言葉が強くなります。ありがたい。実にありがたい。
ただし、同じ成長は別ルートがよい。次は普通に成長したいです。
さらに、堅牢すぎて時々こちらの正気まで守ってくれるセキュリティにも感謝します。
社内に「外から見られる仕組み」を気軽に作れず、ナレッジが社内の奥深くに封印され、しかもお客様の環境から自社ネットワークに入って作業する構図に、たまに哲学的な違和感が生まれる。
その結果、私は個人でQiitaに技術メモを残す必要が出ました。
公開できないことは書かない。公開できることだけを、ちゃんと磨く。
制約は多いほど、文章は強くなります。
関係者各位、心配は不要。ここにあるのは“漏れて困るもの”ではなく、“漏れて助かるもの”だけです。
最後に、我が家のミニチュアダックスフント「びび」に特別な謝意を。
この連載の本当の締切は、びびの散歩です。
少しでも遅いと、足元に来てこちらを見ます。まだ粘ると、もう一度見ます。
それでも動かないと、今日は散歩を忘れた人として扱われます。
プログラムは、書いた通りにしか動きません。
例外やバグは、書いていない前提と、OSやフレームワーク側の見落としから入りやすくなります。
この連載は、その場で困ったときだけでなく、少し時間が経ってからも探しやすい形で並べています。
迷ったときに戻る場所として使えます。表からも一覧からも次の 1 本を探せます。