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

動くコード図鑑

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

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

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

この図鑑の使い方

言語で絞る

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

▶ で実行

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

記事と接続

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

絞り込み

snippet 一覧

473
C#
foreach (DataRow row in dt.Rows)
{
    var customer = new CustomerVm
    {
        Id = row.Field<int>("id"),                      // NOT NULL

イディオム4: DataRow.Field<T>()でNullable<T>受け(業務系最強)

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#ea618bbdf2b0
C#
public class Customer
{
    public int Id { get; set; }                  // NOT NULL
    public string Name { get; set; }             // NULL許容
    public int? Amount { get; set; }             // NULL許容

イディオム5: EF CoreでNullable<T>プロパティに自然マップ

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#d967b68affd7
C#
//罠:null比較がSQLに翻訳される時の挙動
var noBikou = await context.Customers
    .Where(c => c.Bikou == null)
    .ToListAsync();

イディオム5: EF CoreでNullable<T>プロパティに自然マップ

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#2f47b99c64c7
C#
//罠:DBNullが空文字に化ける
string bikou = Convert.ToString(row["bikou"]);
// row["bikou"] がDBNullの場合、bikouは""(空文字)になる
//「未入力」と「空文字」を区別したい画面で表示が崩れる

Convert.ToString(DBNull.Value)の挙動

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#cb498d48eb9d
C#
// ✅パターン1: +演算子(少数結合)
string greeting = "Hello, " + userName + "さん。今日もよろしくお願いします。";
string filePath = baseDir + "\\" + fileName;

パターン1: +演算子—静的な少数結合の本命

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#d77b30cce8dc
C#
// ❌ NG:ループで+=は性能爆発
string result = "";
foreach (var row in dt.Rows.Cast<DataRow>())
{
    result += row["Name"] + "," + row["Amount"] + "\n";  // 1万件で画面固まる

パターン1: +演算子—静的な少数結合の本命

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#6dedf46f8327
C#
// ✅パターン2: String.Concat / String.Join
string[] parts = { "Hello", ", ", userName, "さん。" };
string greeting = String.Concat(parts);

// CSVの1行を組み立てる時の本命

パターン2: String.Concat / String.Join —配列を一発で結合

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#c0352c6eb408
C#
// ✅パターン3: StringBuilder(ループ向き)
var sb = new StringBuilder();
foreach (var row in dt.Rows.Cast<DataRow>())
{
    sb.Append(row["Name"]);

パターン3: StringBuilder —ループ・可変長の正解

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#c688eae43693
C#
// ✅パターン4: String.Format(フォーマット指定向き)
string template = "{0}さん、{1:yyyy/MM/dd}の請求は{2:N0}円です。";
string message = String.Format(template, userName, dueDate, amount);
// → "鈴木太郎さん、2026/06/30の請求は12,500円です。"

パターン4: String.Format —フォーマット指定向き

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#820dcac33498
C#
// ✅パターン5:文字列補間(C# 6以降)
string message = $"{userName}さん、{dueDate:yyyy/MM/dd}の請求は{amount:N0}円です。";
// → "鈴木太郎さん、2026/06/30の請求は12,500円です。"

//複雑な式も入れられる

パターン5:文字列補間$"..." — C# 6以降の本命

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#db4711ab2df6
C#
// ✅パターン6: Stopwatchで性能比較(10万回ループ)
const int N = 100_000;
var data = Enumerable.Range(0, N).Select(i => $"row{i}").ToArray();

// +演算子(NGパターン)
▶ 実行可

性能比較— 10万回ループのStopwatch実測

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)#c95994787d0a
C#
// ✅パターン7: StringBuilder容量初期値(再アロケート抑制)
// 1万行×平均50文字= 50万文字を見越して先に確保
var sb = new StringBuilder(500_000);
foreach (var row in dt.Rows.Cast<DataRow>())
{

小ネタ: StringBuilder容量初期値で更に速くする

C# 文字列結合のパフォーマンス完全比較(+ / Concat / StringBuilder / Format / 補間)未収録#fdb962bddf1b
C#
// これが本番で刺さるやつ
foreach (var line in csvLines) {
    try {
        var amount = int.Parse(line[2]);   // 空欄 / 全角数字 / カンマ入りで FormatException
        // 業務処理
▶ 実行可

なぜ Parse + try/catch が業務系で刺さるのか

C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり#bbe08af2f511
C#
// 正解
foreach (var line in csvLines) {
    if (int.TryParse(line[2], out var amount)) {
        // 業務処理
    } else {
▶ 実行可

なぜ Parse + try/catch が業務系で刺さるのか

C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり#2a821b7d5eed
C#
string[] inputs = { "1234", "0", "-5", "", "abc", "123", "1,000", null! };

foreach (var s in inputs) {
    if (int.TryParse(s, out var value)) {
        Console.WriteLine($"  '{s}' → OK ({value})");
▶ 実行可

パターン1: int.TryParse — 数値変換は bool 戻り値 + out var

C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり#acdf00b7b5e4
C#
using System.Globalization;

string[] inputs = { "2026/05/19", "2026-05-19", "2026/5/19", "05/19/2026" };

// NG パターン: DateTime.TryParse — ロケール依存
▶ 実行可

パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに

C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり#c52514aef32b
C#
public enum Status { Active = 1, Inactive = 2, Pending = 3 }

string[] inputs = { "Active", "active", "Pending", "Unknown", "0", "99", "" };

// NG パターン: Enum.TryParse 単独 (数字文字列が定義外でも true になる)
▶ 実行可

パターン3: Enum.TryParse + IsDefined — 2段ガードで数字文字列の罠も封じる

C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり#b310074d2048
C#
// 形① using ステートメント
using (var reader = new StreamReader("data.txt"))
{
    var line = reader.ReadLine();
    Console.WriteLine(line);
▶ 実行可

そもそも using とは何をしているのか

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け#27097f842757
C#
using System;
using System.Data.SqlClient;

class Program
{

形態①: using ステートメント (C# 1.0+ 全環境 OK)

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#8a7bb6c44be6
C#
using System;
using System.Data.SqlClient;

class Program
{

形態②: using 宣言 (C# 8+ / 関数末尾まで自動 Dispose)

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#9b8516083882
C#
static void ProcessOrders()
{
    using var conn = new SqlConnection(connStr);
    conn.Open();

using 宣言の落とし穴: スコープが関数末尾になる

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#dde7cce30ede
C#
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

形態③: await using (C# 8+ / IAsyncDisposable)

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#747285980e0f
C#
// ❌ ピラミッド (using ネスト 3 段)
using (var conn = new SqlConnection(connStr))
using (var cmd = conn.CreateCommand())
using (var reader = cmd.ExecuteReader())
{

入れ子の解消パターン

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#fc33e16750d0
C#
// ✅ using 宣言 (C# 8+)
using var conn = new SqlConnection(connStr);
using var cmd = conn.CreateCommand();
using var reader = cmd.ExecuteReader();
while (reader.Read()) { /* ... */ }

入れ子の解消パターン

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#d29d41340c01
C#
static void Main()
{
    using var a = new ResourceA(); // 1番目に作る
    using var b = new ResourceB(); // 2番目に作る
    using var c = new ResourceC(); // 3番目に作る

罠③: using 宣言の Dispose 順序は宣言の逆順

C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け未収録#47f37db24a57
C#
using System;
using System.Data;
using System.Windows.Forms;

namespace DataSourceBlog

まず通常の方法でDataSourceにDataTableを指定してみる。

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#a43fb2eac8de
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.DataSource = GetDataTable();
            dataGridView1.Columns["UserId"].HeaderText = "ユーザーID";
            dataGridView1.Columns["UserName"].HeaderText = "ユーザー名";

まず通常の方法でDataSourceにDataTableを指定してみる。

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#d64ba285ae52
C#
namespace DataSourceBlog
{
    public class DataItems
    {
        public int UserId { get; set; }

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#828afb95d512
C#
        private List<DataItems> GetItems(DataTable table)
        {
            var result = new List<DataItems>();

        foreach (DataRow row in table.Rows)

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#7f941235618b
C#
using System.ComponentModel;

namespace DataSourceBlog
{
    public class DataItems

シンプルに列名を変更する方法

DataGridViewのDataSourceを指定した後列名を自由自在に変更する方法未収録#b4c868eb641d