2016-07-14 3 views
0

Derzeit mit einem Problem zu kämpfen. Ich habe 30 Objekte in einem Array. Daten [], in jedem Objekt gibt es 24 Stunden. "Hour00", "Hour01" und so weiter. Ich möchte diese Stunden durchgehen. if (data [i] .Hour00> irgendwas) Aber es scheint, als könnte ich das nicht einfach erhöhen. Ich habe versucht, mit dem Code unten, aber es erlaubt mir nicht, die Zeichenfolge "b" zu verwenden, um zu definieren, welche der Stunden, die ich extrahieren möchte.Verwendung der Zeichenfolge, um Objektwert innerhalb eines Arrays auszuwählen

for(int k = 0; k < 24; k++) 
{ 
    string b = "Hour00"; 
    if(data[i].b > 20){ 
     *Something happens* 

} 

auch versucht:

for(int k = 0; k < 24; k++) 
{ 
    if(data[i].Hour(k) > 20){ 
     *Something happens* 

} 
+2

Können Sie _edit_ Ihre Frage, um uns die Definition von 'Daten' zu zeigen? Was ist das für ein Array von **? –

+0

Ich bin mir nicht sicher, ob ich das vollständig verstehe, aber klingt, als wäre es besser, eine Wörterbuchstruktur zu haben, in der der Schlüssel 'Hour00',' Hour01' ist ... und der Wert ist ein int. Dann können Sie das viel einfacher durchlaufen, als alle Eigenschaften durchzugehen und den Variablennamen dynamisch hinzuzufügen. – keyboardP

+1

Dayum ... das ist ein wirklich schlechtes Verständnis dafür, wie C# funktioniert (und die meisten Sprachen) ... aber ich schlage vor, dass du dir "C# Reflection" anschaust – musefan

Antwort

1

eine Beispielklasse Item

public class Item 
{ 
    public int Hour0 { get;set;} 
    public int Hour1 { get;set;} 
    public int Hour2 { get;set;} 
} 

Mit Reflexion Betrachten konnte man über HourXX Requisiten laufen wie:

var item = new Item { Hour0 = 10, Hour1 = 15, Hour2 = 20 }; 

for (int i = 0; i <= 2; i++) 
{ 
    var hourPropValue = typeof(Item).GetProperty("Hour" + i).GetValue(item); 
    // Conditional code here 
} 
+0

Hat mir sehr geholfen, aber ich werde die spezifischen Daten nicht rausbringen. Das Array ist wie folgt: Tag 1: { Daten [0] .Hour00 Daten [0] .Hour01 Daten [0].Hour02 usw. Am nächsten Tag: Daten [1] .Hour00 Daten [1] .Hour01 Daten [1] .Hour02 Daten [1] .Hour03} und so weiter. Die Iterationen von Tagen ist einfach zu handhaben, aber die Stunde XX nicht. – RiceNor

+1

Was oben gezeigt wird, ist eine Iteration für Stunden. Sie brauchen die äußere Schleife für Tage. Das ist es. Was man sich schwer vorstellen kann, ist der Grund dafür, dass man ein solches Design hat. Es gibt 30 Tage und 24 Stunden. Warum sollte jede Stunde einen anderen Wert enthalten, den Sie "wenn" Bedingungen benötigen. Nicht sicher, für welchen Code du schreibst! 'if'-Bedingung würde Sinn ergeben, wenn Sie nur eine Eigenschaft hätten, die den Stundenwert darstellt. – niksofteng

+0

Dank @Nikhil herausgefunden. Und danke für Geduld mit meiner Formulierung der Frage. Neu dazu. – RiceNor

0

Basierend auf Ihren Kommentar, jetzt soweit ich verstehen. Unter der Annahme, dass die Eigenschaften Hour00..Hour23 Halte ganzzahlige Werte:

int day = DateTime.Today.Day; 
for (int i=0; i<24; i++){ 
    int value = data[day].GetType().GetProperty(string.Format("Hour{0:00}",i)).GetValue(data[day], null); 
} 
+0

Hour00", "Hour01" und so weiter" ich denke, die Schleife auf Array sein wird, die mit HourXX – Dandy

+0

wahre Klasse/Struktur hat, muss ich eine Schleife durch Hour01 Hour02 und so weiter. wenn wir uns auf die zweite in diesem Monat sind wäre es Daten sein [2] .HourXX – RiceNor

+0

Hinzugefügt oben @RiceNor – HGMamaci

Verwandte Themen