Ich habe eine Struktur, die eine Tonne benannte Bool-Mitglieder hat. (Bitte verlassen Sie gute Beispiele und solche, die jetzt wegen des Beispiels nicht berücksichtigt werden).Setzen Sie alle Bool-Elemente eines Objekts mit Reflektion
Ich möchte diese Werte zu Testzwecken nach dem Zufallsprinzip entweder auf wahr oder falsch setzen.
Wie kann ich dies durch Reflexion tun? Diese
ist das, was ich bisher:
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);
}
Leider ist es nie die Schleife eintritt.
UPDATE 1:
Hier ist, wie die Systemstate Struktur aussieht, welche die Art des Zustand variabel ist. Es ist mit Bool Auto Eigenschaften gefüllt.
public struct SystemState
{
...
public bool CanYouHelpMeOnThisOne { get; set; }
...
}
UPDATE 2:
Die Lösung unten geschrieben scheint nett, aber es funktioniert nicht. Der Grund dafür ist, dass SystemState eine Struktur und keine Klasse ist. Daher ist es ein Werttyp und kein Referenztyp. Daher hat das Aufrufen der SetValue-Methode keine Auswirkungen. Nach dem Ändern von SystemState in Klasse funktioniert die folgende Lösung einwandfrei.
Jetzt gibt es noch einen anderen Weg, dies zu erreichen, ohne SystemState zu Klasse zu ändern?
@horgh: Vorausgesetzt, er hat einige 'Bool'-Mitglieder in dort. –
Nur eine Randnotiz: Da Sie zur Kompilierzeit wissen, dass Sie 'Boolean' Felder setzen wollen, würde ich' typeof (Boolean) 'anstelle von' false.GetType() 'verwenden. –