rksoftware

Visual Studio とか C# とかが好きです

オブジェクトのプロパティ/フィールドの名前と値を配列にする

オブジェクトのプロパティ/フィールドの名前と値を配列にしたいことが、あまりないかもしれませんが、たまにはあるかもしれません。
今がそのたまにです。

大したコードではないですが、検索する方もいるかもしれないのでメモ。

概要

リフレクションで名前と値の組のタプルを作ってそれを Select でシーケンスにして Concat でつなげて SelectMany で一本化して ToArray で配列にします。簡単ですね。

var s = 1;
var type = s.GetType();
var nameAndValues =
    Enumerable.Concat(
        type.GetFields().Select(f => (f.Name, f.GetValue(s)))
        , type.GetProperties().Select(p => (p.Name, p.GetValue(s))
    )
    .SelectMany(kv => new string?[] { kv.Item1, (kv.Item2?.ToString()) })
    .ToArray();