🐵
【C#】最近見かけたコーディングから気になったもの4選
最近見かけたコードで気になったものをまとめてみました
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