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

動くコード図鑑

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

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

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

この図鑑の使い方

言語で絞る

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

▶ で実行

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

記事と接続

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

絞り込み

snippet 一覧

97
C#
//カテゴリ別の件数と合計金額
var summary = dt.AsEnumerable()
    .GroupBy(r => r.Field<string>("category"))
    .Select(g => new
    {
▶ 実行可

パターン2: GroupBy +集計(Sum / Count / Average)

C# DataTable を LINQ でフィルタ・GroupBy・分割する3パターン#4012f8c5d3ba
C#
var joined = from o in dtOrders.AsEnumerable()
             join c in dtCustomers.AsEnumerable()
                  on o.Field<int>("customer_id")equals c.Field<int>("id")
             select new
             {
▶ 実行可

Q3.複数のDataTableをJOINしたい時は?

C# DataTable を LINQ でフィルタ・GroupBy・分割する3パターン#bbcfef773b6a
C#
using System;
using System.Data;
using System.Linq;

var dt = new DataTable();
▶ 実行可

パターン①: AsEnumerable().Skip(offset).Take(pageSize)

C# DataTable の大量行を Skip&Take でページングする3パターン — 1万行を1000件ずつ処理する設計#36a8c2d13d9e
C#
var dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("name", typeof(string));
for (int i = 1; i <= 10000; i++) {
    dt.Rows.Add(i, $"item-{i}");
▶ 実行可

パターン②: forループ+ Rows[i] (LINQ不使用・メモリ効率)

C# DataTable の大量行を Skip&Take でページングする3パターン — 1万行を1000件ずつ処理する設計#d083059d494f
C#
using System;
using System.Data;
using System.Linq;

var dt = new DataTable();
▶ 実行可

パターン③: GroupBy((row, i)=> i / pageSize)で全ページ一括分割

C# DataTable の大量行を Skip&Take でページングする3パターン — 1万行を1000件ずつ処理する設計#76f08f93fa36
C#
// ✅定石1: DateTime.Kindの3パターン
var local = DateTime.Now;                                  // Kind=Local
var utc   = DateTime.UtcNow;                                // Kind=Utc
var unsp  = new DateTime(2026, 5, 8, 14, 30, 0);            // Kind=Unspecified

▶ 実行可

定石1: DateTime.Kindの3つの罠(Local / Utc / Unspecified)

C# DateTime と DateTimeOffset の違い・タイムゾーン処理の正解(業務SE本番事故編)#05c39f91324d
C#
// ✅定石3: DateTimeOffsetでタイムゾーン情報を持ち回る
DateTimeOffset jstNow = DateTimeOffset.Now;             // JST環境なら+09:00
DateTimeOffset utcNow = DateTimeOffset.UtcNow;          // +00:00

Console.WriteLine($"JST: {jstNow:yyyy-MM-dd HH:mm:ss zzz}");  // 2026-05-08 14:30:00 +09:00
▶ 実行可

定石3: DateTimeOffsetを使うべき場面

C# DateTime と DateTimeOffset の違い・タイムゾーン処理の正解(業務SE本番事故編)#ec04c241b5a6
C#
// ✅定石4: TimeZoneInfoで明示的タイムゾーン変換
var utcNow = DateTime.UtcNow;

// JSTに変換(.NET Framework / Windows: "Tokyo Standard Time")
TimeZoneInfo jstZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
▶ 実行可

定石4: TimeZoneInfo.ConvertTimeで明示的タイムゾーン変換

C# DateTime と DateTimeOffset の違い・タイムゾーン処理の正解(業務SE本番事故編)#0a3109479ee8
C#
// ✅定石5-b: SQL Serverから読み出したDateTimeのKindはUnspecified
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("SELECT created_at FROM order_log WHERE id = @id", conn))
{
    conn.Open();
▶ 実行可

定石5: SQL Server datetime vs datetime2 —業務系JOIN事故の温床

C# DateTime と DateTimeOffset の違い・タイムゾーン処理の正解(業務SE本番事故編)#b11995d138a9
C#
            // => 1
            Console.WriteLine(((decimal)1.1111).ToInt());

            // => 1
            Console.WriteLine(((decimal)1.9999).ToInt());
▶ 実行可

問題点は小数点以下の丸め方法

【C#】Decimalからintに変換する拡張メソッドを作ってみた#8fc8bb304e09
C#
            // => 2
            Console.WriteLine(((decimal)1.5).ToInt(ParseType.切り上げ));

            // => 1
            Console.WriteLine(((decimal)1.5).ToInt(ParseType.切り捨て));
▶ 実行可

Decimalの小数点以下の丸め方法をフレキシブルにできるようにした

【C#】Decimalからintに変換する拡張メソッドを作ってみた#e4a00beac695
C#
// 設定キーをアルファベット順で反復したい場面
SortedDictionary<string, string> config = new SortedDictionary<string, string>();
config.Add("zebra", "ZZ");
config.Add("apple", "AA");
config.Add("mango", "MM");
▶ 実行可

SortedDictionary を選ぶ場面 (キー順序が必要な時)

C# Dictionary と HashTable の使い分け — 業務SEが型安全に書く3つの判断軸#60f75f238d6e
C#
//商品ステータスのEnum
public enum ProductStatus
{
    Active = 1,        //販売中
    Suspended = 2,     //一時停止
▶ 実行可

パターン1:基本宣言と数値変換

C# Enum 完全ガイド — Description 属性 / [Flags] / 数値変換の使い分け5パターン#4c6d50a09fcd
C#
using System;
using System.ComponentModel;
using System.Reflection;

public enum ProductStatus
▶ 実行可

パターン2: Description属性で画面表示

C# Enum 完全ガイド — Description 属性 / [Flags] / 数値変換の使い分け5パターン#b083bdc7c698
C#
using System;

[Flags]
public enum Permission
{
▶ 実行可

パターン3: [Flags]属性でビット組合せ

C# Enum 完全ガイド — Description 属性 / [Flags] / 数値変換の使い分け5パターン#55cfcc401bc8
C#
using System;

public enum ProductStatus
{
    Active = 1,
▶ 実行可

パターン5: Parse / TryParse + IsDefinedでDB値検証

C# Enum 完全ガイド — Description 属性 / [Flags] / 数値変換の使い分け5パターン#89bad7c4a5ae
C#
// ✅定石1-a: try-catch —例外を捕まえて処理を続ける
try
{
    var dt = LoadFromDb(orderId);
    Render(dt);
▶ 実行可

定石1: try-catch / try-finally / usingの関係(usingは構文糖衣)

C# 例外処理の正解 — try-catch-finally / using / Exception フィルタ (when句) の使い分け#c0aab089a37f
C#
// ✅定石3-a: Exceptionフィルタ(when句)でデッドロックだけリトライ
try
{
    ExecuteSql();
}
▶ 実行可

定石3: Exceptionフィルタ(when句)でcatch内if分岐を排除

C# 例外処理の正解 — try-catch-finally / using / Exception フィルタ (when句) の使い分け#2abecfea594d
C#
// ❌ NG: throw ex;はスタックトレースが「rethrowした行」でリセットされる
public void OuterMethod()
{
    try
    {
▶ 実行可

定石4: throw vs throw exのスタックトレース挙動

C# 例外処理の正解 — try-catch-finally / using / Exception フィルタ (when句) の使い分け#08d0e82d4c16
C#
// ✅定石4:性能比較(10万行×約100MBのログを想定)
const string path = @"C:\logs\big-app.log";

// ReadAllLines版(メモリに全部ロード)
GC.Collect(); GC.WaitForPendingFinalizers();
▶ 実行可

定石4:性能比較— Stopwatch + GC.GetTotalMemory

C# ファイルIO の正解 — StreamReader / File.ReadAllLines / File.ReadLines / using の使い分け#976121387821
C#
    class Program
    {
        static void Main(string[] args)
        {
            int num = 2;
▶ 実行可

そもそも拡張メソッドとは?

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#2eff0113ecce
C#
            string str = "Hello World";
            Console.WriteLine(str.Decoration());
            Console.ReadLine();
▶ 実行可

そもそも拡張メソッドとは?

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#75178f10b7fa
C#
    public static class AnimalExtenssionMethod
    {
        public static void Roar(this IAnimal animal)
        {
            Console.WriteLine(animal.RoarSound);
▶ 実行可

Interfaceに拡張メソッドを入れるとデフォルト実装できる

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#c0e9f3bf46f1
C#
            var dog = new Dog();
            dog.Roar();
            Console.ReadLine();
▶ 実行可

Interfaceに拡張メソッドを入れるとデフォルト実装できる

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#7a4021c0d58e
C#
            var dog = new Dog();
            var cat = new Cat();
            dog.Roar();
            cat.Roar();
            Console.ReadLine();
▶ 実行可

Interfaceに拡張メソッドを入れるとデフォルト実装できる

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#f566dee7ce20
C#
// ✅パターン1: is +パターンマッチ(C# 7以降の本命)
public void Process(object data)
{
    if (data is IDataLoader loader)
    {
▶ 実行可

パターン1: is +パターンマッチング(C# 7以降の本命)

C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)#159cd4da0496
C#
using System;namespace InterfaceExample
{
    public class CSharpHello : ISayHello
    {
        public void Say()
▶ 実行可

Interfaceを継承したクラスを定義

【C#】Interfaceの使いどころは配列ぶん回しのポリモーフィズムで理解出来る!#9b430c6ee487
C#
using System;namespace InterfaceExample
{
    public class VBnetHello : ISayHello
    {
        public void Say()
▶ 実行可

Interfaceを継承したクラスを定義

【C#】Interfaceの使いどころは配列ぶん回しのポリモーフィズムで理解出来る!#950dfa8ee749
C#
    class Program
    {
        static void Main(string[] args)
        {
            var helloList = new ISayHello[]
▶ 実行可

配列をぶん回して実行

【C#】Interfaceの使いどころは配列ぶん回しのポリモーフィズムで理解出来る!#e9039e6a9d95
C#
using System;namespace InterfaceExample
{
    public class FreeHello : ISayHello
    {
        private string _helloItem;
▶ 実行可

自由にHelloというクラスを作ってみる

【C#】Interfaceの使いどころは配列ぶん回しのポリモーフィズムで理解出来る!#13efe9b65211