🐵

【C#】最近見かけたコーディングから気になったもの4選

2024/08/08に公開

最近見かけたコードで気になったものをまとめてみました

string.join

キー項目をまとめて クエリなどに投げ込むときなど
例)DBなどからキー項目を.Select()して列挙、クエリのパラメータを一括して作成。

// string.join
List<string> list = ["111", "222", "333"];
var str = string.Join(",", list);
Console.WriteLine(string.Format("WHERE Id in ({0})",str));

// WHERE Id in (111,222,333)

string.spritとDictionaryの併用

パラメータ解析の簡易的な手法としてつかう
コマンド引数とかクエリストリングとか
#少し手を入れたけどもう少し洗練できそう

// 引数毎に値を取得
var s = "A=123,B=abcde";
var parmA = "";
var parmB = "";
var dic = s.Split(',')
          .Select(a => a.Split('='))
          .ToDictionary(
            a => a[0].Trim(' '),        // key
            a => a[1].Trim(' '));       // value

// dic["A"]
// dic["B"]
foreach (var kv in dic)
{
    switch (kv.Key)
    {
        case "A":
            parmA = kv.Value ?? "";
            break;
        case "B":
            parmB = kv.Value ?? "";
            break;
    }
}
Console.WriteLine("A:" + parmA.ToString());
Console.WriteLine("B:" + parmB.ToString());

// A:123
// B:abcde

.Exceptで変更された行を取り出す(出力は変更後の値)

複数行の状態管理を行いたいときに使える
変更箇所だけの差集合を作れるので、変更箇所のみの更新やログの作成に

// .Except()
List<(string itemName,int itemCode,string otherItem)> 
    beforeList = [("111", 1, "xxx"),
                ("000", 2, "xxx"),
                ("333", 0, "xxx")];
List<(string itemName, int itemCode, string otherItem)> 
    afterList =  [("111", 1, "yyy"),
                ("222", 2, "xxx"),
                ("333", 3, "xxx")];
var exceptList = afterList
        .Select(a => new { a.itemName, a.itemCode })
        .Except(beforeList
            .Select(a => new { a.itemName, a.itemCode }));
foreach (var item in exceptList)
{
    Console.WriteLine(item.itemCode.ToString() + ":" + item.itemName);
}

// 2:222
// 3:333

File操作をメソッドチェーンで

ファイル一覧操作をメソッドチェーンで
Listをnewして行単位にAddなどが不要に。

// file query
string srcFolder = Environment.CurrentDirectory;
var dir = new DirectoryInfo(srcFolder);
var fileList = dir.GetFiles("*.*", SearchOption.AllDirectories);
var fileQuery = fileList
        .Where(a => a.Extension == ".json")
        .OrderBy(a => a.LastWriteTime)
        .Select(a => new { a.Name, a.FullName, a.LastWriteTime });

foreach (var fi in fileQuery)
{
    Console.WriteLine(fi.LastWriteTime.ToString() + ":" + fi.Name);
}

// 2024/08/06(火) 15:11:51:ConsoleApp1.deps.json
// 2024/08/06(火) 15:11:51:ConsoleApp1.runtimeconfig.json
株式会社ジード テックブログ

Discussion