C#

【C#】GetPropertiesでクラス内のプロパティをループさせる

GetPropertiesを使うことで、クラス内のプロパティ一覧を取得することができ、それをforeachでループさせることもできます。
クラス内にプロパティが大量にある場合、一つ一つ指定する手間が省けて便利です。

【検証環境】.NET Framework 4.7.2

使い方

GetType().GetProperties()でプロパティ一覧を取得できます。
また、特定のプロパティ名や型を指定して絞り込むことも可能です。

var obj = new object(); //objにプロパティがあるとして...

//プロパティ一覧を取得
var properties = obj.GetType().GetProperties();

//特定のプロパティを取得(任意のプロパティ名指定)
var property = obj.GetType().GetProperty("propName");

//特定の型のプロパティを取得したい場合(任意の型指定)
var propertiesInt = properties.Where(w => w.PropertyType == typeof(int));
var propertiesDateTime = properties.Where(w => w.PropertyType == typeof(DateTime));

サンプルコード

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Tel { get; set; }
    public string Address { get; set; }
    public string Mail { get; set; }
}

static void Main(string[] args)
{
    var person = new Person()
    {
        Name = "ペン太",
        Age = 25,
        Tel = "080-xxxx-xxxx",
        Address = "東京都ホゲ区",
        Mail = "contact@pg-life.net",
    };
    CreateCSV(person);

    //CSVファイルを作成する場合
    void CreateCSV(object obj)
    {
        var filePath = @"D:\" + "propertyinfo.csv";
        var sb = new StringBuilder();
        //クラス内プロパティのコレクションをループ
        foreach (var prop in obj.GetType().GetProperties())
        {
            if (string.IsNullOrEmpty(sb.ToString()))
            {
                sb.Append(prop.GetValue(obj));
            }
            else
            {
                sb.Append($",{prop.GetValue(obj)}");
            }
        }
        //ファイル作成処理
        StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8);
        file.WriteLine(sb.ToString());
        file.Close();
    }
}
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Tel { get; set; }
    public string Address { get; set; }
    public string Mail { get; set; }
}

static void Main(string[] args)
{
    var people = new List<Person>()
    {
        new Person()
        {
            Name = "ペン太",
            Age = 25,
            Tel = "080-xxxx-xxxx",
            Address = "東京都ホゲ区",
            Mail = "contact@pg-life.net",
        },
        new Person()
        {
            Name = "ポンタ",
            Age = 42,
            Tel = "090-xxxx-xxxx",
            Address = "神奈川県ホゲ市",
            Mail = "hogehoge@pg-life.net",
        },
    };
    CreateCSVByCollection(people);


    //コレクションで渡す場合
    void CreateCSVByCollection(IEnumerable<object> objs)
    {
        var filePath = @"D:\" + "propertyinfo.csv";
        var sb = new StringBuilder();
        StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8);
        foreach (var obj in objs)
        {
            //クラス内プロパティのコレクションをループ
            foreach (var prop in obj.GetType().GetProperties())
            {
                if (string.IsNullOrEmpty(sb.ToString()))
                {
                    sb.Append(prop.GetValue(obj));
                }
                else
                {
                    sb.Append($",{prop.GetValue(obj)}");
                }
            }
            file.WriteLine(sb.ToString());
            sb.Clear();
        }
        file.Close();
    }
}

引数にobject型を指定しているので、様々なクラスに対して使うことが可能です。

エンジニアの転職ならこれ!

【第二新卒向け】マイナビジョブ20's

マイナビジョブ20'sは、20代・第二新卒・既卒向けの転職エージェントです。

▼こんな方におすすめ
・はじめて転職しようと思っている
・転職できるだけのスキルが自分にあるか不安
・手厚いサポートを受けたい

【フリーランス向け】安心保障と豊富な案件紹介 Midworks

Midworksは豊富な案件と「フリーランス」と「正社員」の良いとこ取りをした働き方を実現する手厚い保障が特徴です。

▼こんな方におすすめ
・現在正社員でフリーランスになろうか悩んでいる
・フリーランスとして働いているが、先行きが不安がある  (安定的な案件確保や保障など)
・自分の市場価値を知りたい、見合った案件で参画したい
・今後のキャリアビジョンを踏まえて案件を選びたい

【未経験向け】自宅で現役エンジニアから学べる TechAcademy

テックアカデミーは、現役エンジニアから学べるオンラインに特化したプログラミングスクールです。
講師は全員、通過率10%の選考に合格した現役エンジニア。
確かなスキルをもとに受講生をマンツーマンサポートします。


▼こんな方におすすめ
・自宅にいながらオンライン完結で勉強できる
・受講生に1人ずつ現役エンジニアのパーソナルメンターが専属でつく
・チャットで質問すればすぐに回答が返ってくる
・オリジナルサービスやオリジナルアプリなどの開発までサポート