Ho una struttura che ha una tonnellata di membri bool denominati. (Si prega di lasciare le buone pratiche e tali fuori considerazione ora per il bene dell'esempio).Impostazione di tutti i membri bool di un oggetto mediante la riflessione
Desidero impostare in modo casuale questi valori su true o false, solo a scopo di test.
Come posso farlo attraverso la riflessione?
Questo è quello che ho finora:
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);
}
Purtroppo, non entra mai il ciclo.
UPDATE 1:
Ecco come la struct SystemState sembra, che è il tipo di variabile diStato. È pieno di proprietà auto bool.
public struct SystemState
{
...
public bool CanYouHelpMeOnThisOne { get; set; }
...
}
UPDATE 2:
La soluzione postato qui sotto sembra bello, ma non funziona. Il motivo è che SystemState è una struttura non una classe. Perciò è un tipo di valore non un tipo di riferimento, quindi chiamare il metodo SetValue non ha alcun effetto. Dopo aver modificato SystemState in classe, la soluzione seguente funziona perfettamente.
Ora c'è un altro modo, per raggiungere questo senza cambiare SystemState in classe?
@horgh: Supponendo che abbia alcuni membri 'bool' in là. –
Solo una nota a margine: poiché sai al momento della compilazione che vuoi impostare i campi 'Boolean', userei' typeof (Boolean) 'piuttosto che' false.GetType() '. –