名前付きboolメンバーがたくさんある構造体があります。 (例のために、今は良い習慣などを残しておいてください)。リフレクションを使用してオブジェクトのすべてのboolメンバーを設定する
テスト目的のために、これらの値をtrueまたはfalseにランダムに設定したいとします。
どのように反射することができますか?
これは私がこれまで持っているものです。
Random r = new Random();
foreach (var bool_field in state.GetType().GetFields().Where(x => x.GetType() == false.GetType()))
{
bool_field.SetValue(state, r.Next() % 2 == 0 ? true : false);
}
は残念ながら、それはループに入ることはありません。
UPDATE 1:
ここではSYSTEMSTATE構造体が状態変数の型である、どのように見えるかです。ブールオートプロパティでいっぱいです。
public struct SystemState
{
...
public bool CanYouHelpMeOnThisOne { get; set; }
...
}
UPDATE 2:
下記掲載ソリューションはいいようだが、それは動作しません。理由は、SystemStateがクラスではない構造体であるためです。そのため、参照型ではなくValue型であるため、SetValueメソッドの呼び出しは無効です。 SystemStateをクラスに変更すると、以下の解決策が完全に機能します。
SystemStateをクラスに変更せずにこれを達成するには他の方法がありますか?あなたはWhere
句変更する必要がまず
@horgh:彼はそこにいくつかの 'bool'メンバーがあると仮定します。 –
ちょっとした注意:コンパイル時に 'Boolean'フィールドを設定することを知っているので、' false.GetType() 'ではなく' typeof(Boolean) 'を使用します。 –