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

動くコード図鑑

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

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

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

この図鑑の使い方

言語で絞る

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

▶ で実行

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

記事と接続

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

絞り込み

snippet 一覧

473
C#
// ❌ NG: Ownerなし。タスクバーに別ウィンドウとして並ぶ
var sub = new SubForm();
sub.Show();

// ✅ OK: Owner設定で親子関係明示。タスクバーアイコンも統合される

③ Owner未設定で最前面に出ない・タスクバーに別ウィンドウとして出る

C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#a34b20a08033
C#
//サブフォーム側
public string SelectedCode { get; private set; }

private void btnOK_Click(object sender, EventArgs e)
{

Q1. ShowDialogで開いたフォームから値を返す一番素直な方法は?

C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#97364f9224b2
C#
//サブフォーム
public event EventHandler<string> CodeSelected;

//何か選んだ時
CodeSelected?.Invoke(this, selectedCode);

Q2. Showで開いたフォームから親に値を渡したい時は?

C# WinForms の Form.ShowDialog と Form.Show の違いと使い分け完全ガイド未収録#42adaad26570
C#
namespace BringValueWithForm
{
    public partial class Form1 : Form
    {
        public Form1()

パターン1:MainFormから別Formに値を渡す

【C#】FormとFormの間で値の共有・受け渡しをする!未収録#e215eceeed22
C#
namespace BringValueWithForm.Pattern1
{
    public partial class SubForm : Form
    {
        private string _str;

パターン1:MainFormから別Formに値を渡す

【C#】FormとFormの間で値の共有・受け渡しをする!未収録#1c1697e8fdfe
C#
namespace BringValueWithForm.Pattern2
{
    public partial class MainForm2 : Form
    {
        public MainForm2()

パターン2:MainFormで別Formから値をもらう

【C#】FormとFormの間で値の共有・受け渡しをする!未収録#34e2b76b4236
C#
namespace BringValueWithForm.Pattern2
{
    public partial class SubForm2 : Form
    {
        public string TextBox1Str { get; private set; } = "";

パターン2:MainFormで別Formから値をもらう

【C#】FormとFormの間で値の共有・受け渡しをする!未収録#e709499ee21f
C#
// ❌コンパイルエラー: CS0403
public static T GetDefault<T>()
{
    T item = null;  // 'T'を'null'に変換できません
    return item;

なぜジェネリック制約が必要なのか— T item = null;がコンパイルエラーになる理由

C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#ea71b9dd152d
C#
// ✅対処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
C#
// ✅ 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
C#
// ✅ 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
C#
// ❌制約なしだと実行時MissingMethodExceptionリスクあり
public class FactoryBroken<T>
{
    public T Create()
    {

パターン3: where T : new() —引数なしコンストラクタを持つ型のみ

C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#4b27b8ab4d3c
C#
// ✅ 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
C#
//基底クラス
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
C#
//順序ルール: classまたはstruct →基底クラス→ Interface → new()

// ✅正しい順序
public class FullRepo<T> where T : class, EntityBase, IDisposable, new()
{

複数制約の組み合わせ—順序ルール

C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#59304874af61
C#
//組み合わせ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
C#
public class GenericContainer<T>
{
    private T _value;

    // ❌制約なしでnull比較するとCS0019など

ハマりポイント整理— default(T) vs nullの使い分け

C# Generic 制約 (where T : …) — 業務SE が型安全コードを書く5パターン未収録#06eaa23742b4
C#
    public static class IntExtenssionMethod
    {
        public static int Square(this int num)
        {
            return num * num;

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

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#ada51f9d3b8b
C#
    class Program
    {
        static void Main(string[] args)
        {
            int num = 2;
▶ 実行可

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

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#2eff0113ecce
C#
    public static class StringExtenssionMethod
    {
        public static string Decoration(this string str)
        {
            return $@"*{str}*";

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

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

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

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#75178f10b7fa
C#
namespace InterfaceExtenssionMethod
{
    public interface IAnimal
    {
        string RoarSound { get; }

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

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

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

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる#c0e9f3bf46f1
C#
    public class Dog : IAnimal
    {
        public string RoarSound => "わんわん";
    }

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

C#でInterfaceに拡張メソッドを追加してデフォルト実装してみる未収録#bbdeb9f5ad88
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#
// ✅パターン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
C#
// ✅パターン3-a:暗黙キャスト(継承関係が静的型レベルで明確)
public class CsvLoader : IDataLoader { /* 実装 */ }

CsvLoader csvLoader = new CsvLoader();
IDataLoader loader = csvLoader;  // ✅暗黙キャストOK(CsvLoader → IDataLoader)

パターン3:暗黙キャストと直接キャスト(型が確定している時だけ)

C# Interface の継承判定と暗黙キャストの定石(is / as / 暗黙キャスト 3パターン)未収録#113b3d707a4c
C#
// ❌罠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