かずきのBlog@hatena

日本マイクロソフトに勤めています。このブログは個人ブログなので、ここに書いている内容は個人的な意見で会社の公式見解ではない点にご注意ください。好きなものは XAML と C# 。苦手なものは型の無い言語です。

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

小ネタですが。

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で。定番の方法とかってどんなんなんだろうか。