複数のプロパティを配列化する
例えば
public class HoGE
{
public bool Param1 { get; set; }
public bool Param2 { get; set; }
public bool Param3 { get; set; }
public bool Param4 { get; set; }
public bool Param5 { get; set; }
public bool Param6 { get; set; }
public bool Param7 { get; set; }
public bool Param8 { get; set; }
public bool Param9 { get; set; }
public bool Param10 { get; set; }
}
こんなクラスがあったとして
このクラスのboolがtrueのプロパティ名を配列化したいみたいなパターン。
var hoge = new HoGE
{
Param1 = true,
Param5 = true,
Param9 = true,
};
を処理して
[ "Param1" , "Param5", "Param9"]
ってしたい感じで取得したい時。
ゴリゴリ書けば
string[] h = Enumerable.Range(1, 10)
.Select(x =>
{
switch (x)
{
case 1: return hoge.Param1 ? nameof(hoge.Param1) : "";
case 2: return hoge.Param2 ? nameof(hoge.Param2) : "";
case 3: return hoge.Param3 ? nameof(hoge.Param3) : "";
case 4: return hoge.Param4 ? nameof(hoge.Param4) : "";
case 5: return hoge.Param5 ? nameof(hoge.Param5) : "";
case 6: return hoge.Param6 ? nameof(hoge.Param6) : "";
case 7: return hoge.Param7 ? nameof(hoge.Param7) : "";
case 8: return hoge.Param8 ? nameof(hoge.Param8) : "";
case 9: return hoge.Param9 ? nameof(hoge.Param9) : "";
case 10: return hoge.Param10 ? nameof(hoge.Param10) : "";
default: return "";
}
}).Where(x => x != "").ToArray();
こんな感じかな。
PropertyInfoとか使えば
string[] h = properties
.Where(pi => pi.Name.StartsWith("Param") && (bool)pi.GetValue(hoge))
.Select(pi => pi.Name)
.ToArray();
こんな感じ。
もっと良い書き方あるような気がするんだけど、思いつかない。
Author And Source
この問題について(複数のプロパティを配列化する), 我々は、より多くの情報をここで見つけました https://qiita.com/yu_ka1984/items/42b4046b7dac550e534b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .