動くコード図鑑
$ ls -1 /library | wc -l → 619
触って動く、検証済みの正解集。
公開記事から抽出した全コードブロックを 1 つずつページ化。 ▶ ボタンで 実行ログを再生し、 さも今動いてるかのように出力を流す。

この図鑑の使い方
言語で絞る
C# / SQL / TypeScript / PowerShell / Bash でフィルタ。
▶ で実行
事前収録の出力を 1 行ずつ再生。 ぱっと結果が見える。
記事と接続
各 snippet は出典記事へのリンク付き。 文脈ごと読める。
絞り込み
snippet 一覧
473 件// ❌ NG: Ownerなし。タスクバーに別ウィンドウとして並ぶ var sub = new SubForm(); sub.Show(); // ✅ OK: Owner設定で親子関係明示。タスクバーアイコンも統合される
③ Owner未設定で最前面に出ない・タスクバーに別ウィンドウとして出る
C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#a34b20a08033
//サブフォーム側 public string SelectedCode { get; private set; } private void btnOK_Click(object sender, EventArgs e) {
Q1. ShowDialogで開いたフォームから値を返す一番素直な方法は?
C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#97364f9224b2
//サブフォーム public event EventHandler<string> CodeSelected; //何か選んだ時 CodeSelected?.Invoke(this, selectedCode);
Q2. Showで開いたフォームから親に値を渡したい時は?
C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#42adaad26570
namespace BringValueWithForm { public partial class Form1 : Form { public Form1()
パターン1:MainFormから別Formに値を渡す
【C#】FormとFormの間で値の共有・受け渡しをする!未収録#e215eceeed22
namespace BringValueWithForm.Pattern1 { public partial class SubForm : Form { private string _str;
パターン1:MainFormから別Formに値を渡す
【C#】FormとFormの間で値の共有・受け渡しをする!未収録#1c1697e8fdfe
namespace BringValueWithForm.Pattern2 { public partial class MainForm2 : Form { public MainForm2()
パターン2:MainFormで別Formから値をもらう
【C#】FormとFormの間で値の共有・受け渡しをする!未収録#34e2b76b4236
namespace BringValueWithForm.Pattern2 { public partial class SubForm2 : Form { public string TextBox1Str { get; private set; } = "";
パターン2:MainFormで別Formから値をもらう
【C#】FormとFormの間で値の共有・受け渡しをする!未収録#e709499ee21f
// ❌コンパイルエラー: CS0403 public static T GetDefault<T>() { T item = null; // 'T'を'null'に変換できません return item;
なぜジェネリック制約が必要なのか— T item = null;がコンパイルエラーになる理由
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#ea71b9dd152d
// ✅対処1: where T : classで参照型に絞る public static T GetDefault<T>()where T : class { T item = null; // OK return item;
なぜジェネリック制約が必要なのか— T item = null;がコンパイルエラーになる理由
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#9b560add64cf
// ✅ Tは参照型のみ public class Cache<T> where T : class { private readonly Dictionary<string, T> _store = new Dictionary<string, T>();
パターン1: where T : class —参照型のみ許容
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#5262b3f47b63
// ✅ Tは値型のみ(int / DateTime / struct / enum) public class NullableWrapper<T> where T : struct { private T? _value; // Nullable<T>として宣言
パターン2: where T : struct —値型のみ許容
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#1bef6345d897
// ❌制約なしだと実行時MissingMethodExceptionリスクあり public class FactoryBroken<T> { public T Create() {
パターン3: where T : new() —引数なしコンストラクタを持つ型のみ
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#4b27b8ab4d3c
// ✅ TはIDisposable実装のみ public class DisposableScope<T> where T : IDisposable { private readonly T _resource;
パターン4: where T : IDisposable — Interface実装制約
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#13cf670d5462
//基底クラス public abstract class EntityBase { public int Id { get; set; } public DateTime CreatedAt { get; set; }
パターン5: where T : EntityBase —基底クラス制約
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#778e81884812
//順序ルール: classまたはstruct →基底クラス→ Interface → new() // ✅正しい順序 public class FullRepo<T> where T : class, EntityBase, IDisposable, new() {
複数制約の組み合わせ—順序ルール
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#59304874af61
//組み合わせ1:業務系Repository<T> public class Repository<T> where T : class, new(){ /* ... */ } //組み合わせ2: IDisposable + usingで安全に使える参照型 public class SafeScope<T> where T : class, IDisposable { /* ... */ }
複数制約の組み合わせ—順序ルール
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#c1aad3b4f0bb
public class GenericContainer<T> { private T _value; // ❌制約なしでnull比較するとCS0019など
ハマりポイント整理— default(T) vs nullの使い分け
C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#06eaa23742b4
public static class IntExtenssionMethod { public static int Square(this int num) { return num * num;
そもそも拡張メソッドとは?
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#ada51f9d3b8b
class Program { static void Main(string[] args) { int num = 2;
▶ 実行可
そもそも拡張メソッドとは?
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#2eff0113ecce
public static class StringExtenssionMethod { public static string Decoration(this string str) { return $@"*{str}*";
そもそも拡張メソッドとは?
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#485517d8bf92
string str = "Hello World"; Console.WriteLine(str.Decoration()); Console.ReadLine();
▶ 実行可
そもそも拡張メソッドとは?
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#75178f10b7fa
namespace InterfaceExtenssionMethod { public interface IAnimal { string RoarSound { get; }
Interfaceに拡張メソッドを入れるとデフォルト実装できる
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#9d80b8e1e416
public static class AnimalExtenssionMethod { public static void Roar(this IAnimal animal) { Console.WriteLine(animal.RoarSound);
▶ 実行可
Interfaceに拡張メソッドを入れるとデフォルト実装できる
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#c0e9f3bf46f1
public class Dog : IAnimal { public string RoarSound => "わんわん"; }
Interfaceに拡張メソッドを入れるとデフォルト実装できる
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#bbdeb9f5ad88
var dog = new Dog(); dog.Roar(); Console.ReadLine();
▶ 実行可
Interfaceに拡張メソッドを入れるとデフォルト実装できる
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#7a4021c0d58e
var dog = new Dog(); var cat = new Cat(); dog.Roar(); cat.Roar(); Console.ReadLine();
▶ 実行可
Interfaceに拡張メソッドを入れるとデフォルト実装できる
C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#f566dee7ce20
// ✅パターン1: is +パターンマッチ(C# 7以降の本命) public void Process(object data) { if (data is IDataLoader loader) {
▶ 実行可
パターン1: is +パターンマッチング(C# 7以降の本命)
C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)#159cd4da0496
// ✅パターン2: as + nullチェック(複数候補をフラットに並べる) public string Describe(object obj) { var loader = obj as IDataLoader; if (loader != null)return $"Loader: {loader.SourceName}";
パターン2: as + nullチェック(複数候補を並べる時)
C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)未収録#303ce1480b7a
// ✅パターン3-a:暗黙キャスト(継承関係が静的型レベルで明確) public class CsvLoader : IDataLoader { /* 実装 */ } CsvLoader csvLoader = new CsvLoader(); IDataLoader loader = csvLoader; // ✅暗黙キャストOK(CsvLoader → IDataLoader)
パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)
C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)未収録#113b3d707a4c
// ❌罠1:値型InterfaceでBoxing大量発生(性能劣化) public struct Point : IComparable<Point> { public int X { get; set; } public int Y { get; set; }
ハマりポイント— BoxingとGetType()誤用
C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)未収録#41267d4898a1