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 = "[email protected]",
};
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 = "[email protected]",
},
new Person()
{
Name = "ポンタ",
Age = 42,
Tel = "090-xxxx-xxxx",
Address = "神奈川県ホゲ市",
Mail = "[email protected]",
},
};
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型を指定しているので、様々なクラスに対して使うことが可能です。