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

動くコード図鑑

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

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

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

この図鑑の使い方

言語で絞る

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

▶ で実行

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

記事と接続

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

絞り込み

snippet 一覧

473
C#
    public enum FilterType
    {
        HTML = 1,
        CSV
    }

これを応用すると下記のような感じにもできる。

C#でOpenFileDialogが継承できない?それならフィールドに持っちゃえばいいんじゃね?未収録#4150199d1ce1
C#
    public class CustomOpenFileDialog
    {
        private OpenFileDialog _ofd;

    public string FileName => _ofd.FileName;

これを応用すると下記のような感じにもできる。

C#でOpenFileDialogが継承できない?それならフィールドに持っちゃえばいいんじゃね?未収録#b19dc111a5eb
C#
        private void button1_Click(object sender, EventArgs e)
        {
            var cofd = new CustomOpenFileDialog(FilterType.CSV);
            if (cofd.ShowDialog() == DialogResult.OK)
            {

これを応用すると下記のような感じにもできる。

C#でOpenFileDialogが継承できない?それならフィールドに持っちゃえばいいんじゃね?未収録#3cbb7f609ff9
C#
        private string _gender;
        public string Gender
        {
            get { return _gender; }
            set { _gender = value; }

プロパティはフィールド(メンバ変数)へのアクセスする手段でしかない

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#03c4cbbe71da
C#
        private string _gender;
        public string Gender
        {
            get => _gender;
            set => _gender = value;

プロパティはフィールド(メンバ変数)へのアクセスする手段でしかない

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#f0d0d8bc2968
C#
    public class User
    {
        public int ID { get; set; }
        public string Name { get; set; }

Datagridに値を表示できる

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#147badd2385c
C#
        private void Form1_Load(object sender, EventArgs e)
        {
            _users = new List<User>()
            {
                new User(20,1,"杉山","東京都","男")

Datagridに値を表示できる

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#10a217f49692
C#
    public class XmlHelper<T> where T : class
    {
        public string TargetPath { get; set; }
        private Encoding encoding => System.Text.Encoding.GetEncoding("shift_jis");

シリアライズしてXMLにできる(Privateのみ出力できない)

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#7d09cf0c607a
C#
            var props = typeof(User).GetProperties();

        var str = new StringBuilder();
        foreach (var user in _users)
        {

プロパティを動的に探して色々できる

【C#】プロパティとフィールド(メンバ変数)の決定的な違い!未収録#bf30b0e5ea43
C#
    public class User
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }

プロパティを動的に検索して値を取得してみる

【C#】プロパティを動的に検索して値を取得したり変更する!未収録#a00cbaec9221
C#
    class Program
    {
        static void Main(string[] args)
        {
            var user = new User(1,"鈴木","東京都墨田区");

プロパティを動的に検索して値を取得してみる

【C#】プロパティを動的に検索して値を取得したり変更する!未収録#42b95ad4072a
C#
    class Program
    {
        static void Main(string[] args)
        {
            var user = new User(1,"鈴木","東京都墨田区");
▶ 実行可

プロパティを動的に検索して値を取得してみる

【C#】プロパティを動的に検索して値を取得したり変更する!#8c60479060d4
C#
            PropertyInfo[] props = typeof(User).GetProperties();
            var propNames = props.Select(prop => prop.Name);
            Console.WriteLine(String.Join(",",propNames.ToArray()));
            Console.ReadLine();
▶ 実行可

簡単に解説

【C#】プロパティを動的に検索して値を取得したり変更する!#fde80ee13ca4
C#
            // ここでAddressのプロパティの情報を抜き出して
            var addressProp = props.FirstOrDefault(item => item.Name == nameof(User.Address));

        // ここで上記プロパティ情報にインスタンスを投げてデータを取得してる。
        Console.WriteLine(addressProp.GetValue(user));
▶ 実行可

簡単に解説

【C#】プロパティを動的に検索して値を取得したり変更する!#1b3dedb8c55c
C#
            var user = new User(1, "鈴木", "東京都墨田区");
            PropertyInfo[] props = typeof(User).GetProperties();
            // ここでAddressのプロパティの情報を抜き出して
            var addressProp = props.FirstOrDefault(item => item.Name == nameof(User.Address));

▶ 実行可

プロパティを動的に検索して値を変更してみる

【C#】プロパティを動的に検索して値を取得したり変更する!#91b9a817b639
C#
    public class Car
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Maker { get; set; }

まずはサンプルクラスの用意

【C#】プロパティを動的に検索して型の種類を取得する!未収録#dcd0259bbef6
C#
    class Program
    {
        static void Main(string[] args)
        {
            PropertyInfo[] props = typeof(Car).GetProperties();
▶ 実行可

PropertyInfoから型を取得する

【C#】プロパティを動的に検索して型の種類を取得する!#64159c77779d
C#
using System.Text.RegularExpressions;

public static class EmailValidator
{
    // ✅業務系の現実版(簡易・ほぼ十分)
▶ 実行可

パターン1:メールアドレス検証—簡易版が現実解

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#8e620c411684
C#
using System.Text.RegularExpressions;

public static class PhoneValidator
{
    // ✅国内電話番号(先頭0 +ハイフン任意)
▶ 実行可

パターン2:電話番号検証—国内+国際対応

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#f2eebc57a171
C#
using System.Text.RegularExpressions;

public static class PostalCodeValidator
{
    // ✅郵便番号: 7桁+ハイフン任意
▶ 実行可

パターン3:郵便番号検証— 7桁ハイフン形式

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#da3fce3a8fab
C#
using System.Text.RegularExpressions;

public static class CharTypeValidator
{
    // ✅全角文字(ASCII外)が含まれているか
▶ 実行可

パターン4:全角半角判定— Unicode範囲

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#50a671243a77
C#
using System;
using System.Text.RegularExpressions;

public static class FormatValidator
{
▶ 実行可

パターン5:数値・日付フォーマット検証

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#5f14a216eab8
C#
using System.Diagnostics;
using System.Text.RegularExpressions;

public static class RegexPerformanceComparison
{
▶ 実行可

パターン6: RegexOptions.Compiledでパフォーマンス改善

C# 正規表現の業務系基本 — メール / 電話 / 郵便番号 / 全角半角の入力検証5パターン#228fa557c142
C#
DataRow row = dt.Rows[0];
object val = row["bikou"];  //この時点で値はobject型

string bikou = val is DBNull
    ? null

イディオム1: is DBNullで直接比較する基本形

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#12f251f72d35
C#
//整数列を扱う場合
int? amount = row["amount"] is DBNull
    ? (int?)null
    : Convert.ToInt32(row["amount"]);

イディオム1: is DBNullで直接比較する基本形

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#0dee0b27ad7e
C#
//文字列列のnull安全取得
string bikou = Convert.IsDBNull(row["bikou"])? null : row["bikou"].ToString();

//あるいは??と組み合わせて空文字フォールバック
string bikouOrEmpty = (Convert.IsDBNull(row["bikou"])? null : row["bikou"].ToString())?? string.Empty;

イディオム2: Convert.IsDBNull + ??演算子のシンプルパターン

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#769f7a7bda55
C#
//罠:Convert.ToInt32(DBNull.Value)は0を返す
int amount = Convert.ToInt32(row["amount"]);
// row["amount"] がDBNullだとamount = 0になる
//「金額0円」と「未入力」を区別したい業務系では事故の元

イディオム2: Convert.IsDBNull + ??演算子のシンプルパターン

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#f6d9581c23a1
C#
using (var conn = new SqlConnection(connStr))
using (var cmd = new SqlCommand("SELECT id, name, amount FROM customers", conn))
{
    conn.Open();
    using (var reader = cmd.ExecuteReader())

イディオム3: DataReader.IsDBNull(i)で読み取り時に分岐

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#5206497a1ab8
C#
//拡張メソッド化すると行が圧縮できる
public static class SqlReaderExtensions
{
    public static T? GetNullable<T>(this SqlDataReader reader, int ordinal)
        where T : struct

イディオム3: DataReader.IsDBNull(i)で読み取り時に分岐

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#13fb96000b24
C#
using System.Data;

DataRow row = dt.Rows[0];

//値型→ Nullable<T>で受ける

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

SQL Server の DBNull を C# で安全にハンドリングする5つのイディオム未収録#94099dc30e09