かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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

小ネタですが。

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