ヤマカサのプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

実践で役立つ C#プログラミングのイディオム/定石&パターン その6

Chapter 4 基本イディオム

イディオムを覚えることで汎用的なコードを書き、コードに統一性を持たせることができます。

Dictionary の初期化

どの言語でも大体このように初期化すると思います。

    class Program
    {
        static void Main(string[] args)
        {
            var dict1 = new Dictionary<string, int>()
            {
                { "国語", 80 },
                { "数学", 100 },
                { "英語", 120 },
            };
            // C# 6.0
            var dict2 = new Dictionary<string, int>()
            {
                ["国語"] = 80,
                ["数学"] = 100,
                ["英語"] = 120,
            };

            var keys = new string[] { "国語", "数学", "英語", };
            foreach (string key in keys)
            {
                Console.WriteLine("{0} {1} {2}",key, dict1[key], dict2[key]);
            }
        }
    }

null 合体演算子

null かどうかを判断して条件分岐をさせるときに、?? を使います。

?? 演算子 - C# リファレンス | Microsoft Docs

            int? a = null;
            int b = a ?? -1;
            Console.WriteLine(b);  // output: -1

null 条件演算子

null を代入することができます。

            int?[] nums = null;
            var x = nums?[0];
            var y = nums[1]; // エラー

可変長引数 params

           var format = "{0:0000}";
           WriteLog(format, 1, 2, 3);
        public static void WriteLog(string format, params object[] args)
        {
            foreach(var s in args)
            {
                Console.WriteLine(String.Format(format, s));
            }
        } 

逐語的リテラル文字列

\ をエスケープ文字として認識させないように、ファイルパスなどの指定は @ をつけます。

文字列 - C# プログラミング ガイド | Microsoft Docs

var path = @"C:\user\temp\sample.txt"