かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

キャメルケースやアッパーキャメルケースの文字列を_区切りの文字列にする

小ネタですが。

var name = "PropertyName";
var output = name.Zip((name + " ").Skip(1), Tuple.Create)
    .Aggregate("", (x, y) => char.IsLower(y.Item1) && char.IsUpper(y.Item2) ?
            x + char.ToLower(y.Item1) + "_" :
            x + char.ToLower(y.Item1));
Console.WriteLine(output); // property_name

正規表現でさくっと置換する方法もありますが、まぁなんとなくLINQで。定番の方法とかってどんなんなんだろうか。