動くコード図鑑技術記事現場の渡り方キャリア論すべての記事About

動くコード図鑑

$ ls -1 /library | wc -l → 619

触って動く、検証済みの正解集。

公開記事から抽出した全コードブロックを 1 つずつページ化。 ▶ ボタンで 実行ログを再生し、 さも今動いてるかのように出力を流す。

この図鑑の使い方

言語で絞る

C# / SQL / TypeScript / PowerShell / Bash でフィルタ。

▶ で実行

事前収録の出力を 1 行ずつ再生。 ぱっと結果が見える。

記事と接続

各 snippet は出典記事へのリンク付き。 文脈ごと読める。

絞り込み

snippet 一覧

473
C#
var names = products
    .Where(p => p.Price >= 1000)
    .Select(p => p.Name)
    .ToList();

俺が TypeScript に出会った朝 — LINQ が見当たらない焦り

C# LINQ → TypeScript Array methods 翻訳早見表 — Where/Select/GroupBy が filter/map/reduce にどう写るか未収録#d65472f31257
C#
// C#
bool hasExpensive = products.Any(p => p.Price >= 10000);
bool allInStock = products.All(p => p.Stock > 0);

対応 7: Any / All ↔ some / every

C# LINQ → TypeScript Array methods 翻訳早見表 — Where/Select/GroupBy が filter/map/reduce にどう写るか未収録#b3a1ea8fb054
C#
// C# 側 (3 行で済む)
var counts = products
    .Where(p => p.Price >= 1000)
    .GroupBy(p => p.Category)
    .ToDictionary(g => g.Key, g => g.Count());

ミニマム検証のハンズオン

C# LINQ → TypeScript Array methods 翻訳早見表 — Where/Select/GroupBy が filter/map/reduce にどう写るか未収録#279dc945d7aa
C#
// NGパターン:直訳
string r = s.Substring(s.Length - 3);                // "cde" だが s が短いと例外
string r2 = "ab".Substring("ab".Length - 5);         // ArgumentOutOfRangeException
string r3 = ((string)null).Substring(((string)null).Length - 3); // NRE

Rightの仕様差

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#3b80a0da3253
C#
public static class StringCompat
{
    /// <summary>VB.net の Right 相当。null・長さオーバーフロー・負値を吸収。</summary>
    public static string Right(string s, int length)
    {

ヘルパ1: RightのC#実装

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#d3eb9db0ae6a
C#
string r1 = StringCompat.Right("abcde", 3);    // "cde"
string r2 = StringCompat.Right("ab", 5);       // "ab"
string r3 = StringCompat.Right(null, 3);       // ""

ヘルパ1: RightのC#実装

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#45fda6516d55
C#
public static class StringCompat
{
    /// <summary>VB.net の Mid 相当。1ベース起点、範囲外は空文字。</summary>
    public static string Mid(string s, int start, int length)
    {

ヘルパ2: MidのC#実装

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#af9a11fd98ca
C#
public static class StringCompat
{
    /// <summary>VB.net の Left 相当。null・長さオーバーフロー・負値を吸収。</summary>
    public static string Left(string s, int length)
    {

ヘルパ3: LeftのC#実装

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#33c0d3d82b20
C#
public static string RightByGrapheme(string s, int length)
{
    if (string.IsNullOrEmpty(s) || length <= 0) return string.Empty;
    var si = new System.Globalization.StringInfo(s);
    if (length >= si.LengthInTextElements) return s;

全角文字・Surrogate Pairで末尾が壊れる

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#f3681c003f30
C#
// バイト単位で取りたい場合(SJIS で固定長レコードを切る等)
byte[] bytes = System.Text.Encoding.GetEncoding("Shift_JIS").GetBytes(s);
byte[] slice = new byte[len];
Array.Copy(bytes, start, slice, 0, len);
string result = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(slice);

文字数vsバイト数の混乱

VB.net の Right / Mid / Left を C# に翻訳する完全早見表未収録#3a5a69353075
C#
// ✅定石1: BackgroundWorkerでファイル取り込み
using System.ComponentModel;

public partial class ImportForm : Form
{

定石1: BackgroundWorker —旧式だがDesigner配置できる

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#b0579a8291a4
C#
// ✅定石2: Task.Run + Control.Invoke
using System.Threading.Tasks;

public partial class ImportForm : Form
{

定石2: Task.Run + Control.Invokeでモダンに書く

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#e29c62a2a0b1
C#
// ✅定石3: async-await + Task.Run(新規プロジェクトの本命)
using System.Threading.Tasks;

public partial class ImportForm : Form
{

定石3: async-await + Task.Run —新規プロジェクトの本命

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#53f919be06e4
C#
// ✅定石4: IProgress<T>で進捗報告(async-await版BackgroundWorker.ReportProgress)
using System;
using System.Threading.Tasks;

public partial class ImportForm : Form

定石4: IProgressで進捗をUIに細かく反映

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#fa2904c0a651
C#
// ✅定石5: CancellationTokenでキャンセル可能
using System.Threading;
using System.Threading.Tasks;

public partial class ImportForm : Form

定石5: CancellationTokenでキャンセル可能にする

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#298c9a3462f2
C#
// ❌ NG: UIスレッドでWait()/ Resultを呼ぶとデッドロック
private void btnStart_Click(object sender, EventArgs e)
{
    var result = Task.Run(()=> DoHeavyWork()).Result;   // ← UIスレッド固まる
    // ...

定石6: Wait()/ Resultでデッドロック—業務系の禁忌パターン

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#8f703fd10c73
C#
// ✅定石1: BackgroundWorkerでファイル取り込み
using System.ComponentModel;

public partial class ImportForm : Form
{

定石1: BackgroundWorker —旧式だがDesigner配置できる

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#df48c972d049
C#
// ✅定石2: Task.Run + Control.Invoke
using System.Threading.Tasks;

public partial class ImportForm : Form
{

定石2: Task.Run + Control.Invokeでモダンに書く

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#17558f5f8cdc
C#
// ✅定石3: async-await + Task.Run(新規プロジェクトの本命)
using System.Threading.Tasks;

public partial class ImportForm : Form
{

定石3: async-await + Task.Run —新規プロジェクトの本命

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#08f2e9eba268
C#
// ✅定石4: IProgress<T>で進捗報告(async-await版BackgroundWorker.ReportProgress)
using System;
using System.Threading.Tasks;

public partial class ImportForm : Form

定石4: IProgressで進捗をUIに細かく反映

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#8291000709ca
C#
// ✅定石5: CancellationTokenでキャンセル可能
using System.Threading;
using System.Threading.Tasks;

public partial class ImportForm : Form

定石5: CancellationTokenでキャンセル可能にする

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#cdf2b4fdbd67
C#
// ❌ NG: UIスレッドでWait()/ Resultを呼ぶとデッドロック
private void btnStart_Click(object sender, EventArgs e)
{
    var result = Task.Run(()=> DoHeavyWork()).Result;   // ← UIスレッド固まる
    // ...

定石6: Wait()/ Resultでデッドロック—業務系の禁忌パターン

WinForms 非同期処理の正解 — BackgroundWorker / Task.Run / async-await の使い分け未収録#a9b2d6704a87
C#
// WinForms: クリックは同一プロセス内で即ハンドラが呼ばれる
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.RowIndex < 0) return;                 // ヘッダクリックは除外
    var row = dataGridView1.Rows[e.RowIndex];   // 行はメモリ上にある

構造差1: イベントはサーバへ往復する

WinForms の DataGridView CellClick に慣れた業務SEが ASP.NET Razor の onclick で戸惑う3つの構造差未収録#69c5b317cca3
C#
// PageModel: POST されて初めてサーバ側ハンドラが動く
public class IndexModel : PageModel
{
    public IActionResult OnPostSelect(int id)   // 引数で行IDを受け取る
    {

構造差1: イベントはサーバへ往復する

WinForms の DataGridView CellClick に慣れた業務SEが ASP.NET Razor の onclick で戸惑う3つの構造差未収録#b5896e34500d
C#
// 状態の持ち回り方(用途で使い分け)
TempData["Message"] = msg;     // 次の1リクエストだけ持たせる(PRG とセット)
HttpContext.Session.SetInt32("SelectedId", id);  // セッション中ずっと
// または、毎回 DB / hidden から復元する(いちばん素直)

構造差2: ページは毎回作り直される

WinForms の DataGridView CellClick に慣れた業務SEが ASP.NET Razor の onclick で戸惑う3つの構造差未収録#88dea1d0cff9
C#
// Index.cshtml.cs — ハンドラと状態の持ち回りだけの最小形
public class IndexModel : PageModel
{
    public string? Message { get; private set; }

ミニマム検証 — 最小の Razor onclick を動かす

WinForms の DataGridView CellClick に慣れた業務SEが ASP.NET Razor の onclick で戸惑う3つの構造差未収録#d47e4fe2a234
C#
// ✅定石1-a: DataTableをバインド(業務SE最頻)
DataTable dt = LoadCustomerMaster();   // DataAdapterで取得済み
combo.DisplayMember = "name";           //画面に出すカラム
combo.ValueMember   = "id";             //内部で扱うカラム
combo.DataSource    = dt;

定石1: DataSourceバインディング基本(DataTable / List /配列の3パターン)

WinForms ComboBox の DataSource バインディングと SelectedIndex / SelectedValue / SelectedItem の違い未収録#1175baf9dd62
C#
// ❌ NG: DataSourceを先に設定するとDisplayMemberが効かないケース
combo.DataSource    = dt;          // ←この時点で表示が"DataRowView"のToString()で固まる
combo.DisplayMember = "name";       // ←後から設定しても効かないor微妙な挙動
combo.ValueMember   = "id";

定石2: DisplayMember / ValueMemberの設定順序の罠

WinForms ComboBox の DataSource バインディングと SelectedIndex / SelectedValue / SelectedItem の違い未収録#0e43294379e4
C#
// ✅定石3: Selected3兄弟の使い分け
private void btnSubmit_Click(object sender, EventArgs e)
{
    // 1. SelectedIndex:選択行番号(int、未選択は-1)
    int idx = combo.SelectedIndex;

定石3: Selected3兄弟(Index / Value / Item)の使い分け

WinForms ComboBox の DataSource バインディングと SelectedIndex / SelectedValue / SelectedItem の違い未収録#d784d45bf247
C#
// ❌ NG: DataSource切り替え時に二重発火、本番更新が2回走る
private void combo_SelectedIndexChanged(object sender, EventArgs e)
{
    int customerId = (int)combo.SelectedValue;
    UpdateCustomerView(customerId);   // ← DataSource切替時に複数回呼ばれる

定石4: SelectedIndexChanged二重発火の回避

WinForms ComboBox の DataSource バインディングと SelectedIndex / SelectedValue / SelectedItem の違い未収録#be8898e7aa37