2016-06-03 23 views
0

Also, ich habe ein Objekt mit einigen Eigenschaften, wie folgt: Dim.d1, Dim.d2,...,Dim.d50 , die Zeichenfolgen zurückgeben. Zum Beispiel: Dim.d1="Description A", Dim.d2="Description B",etc.Bewerten Ausdruck

Was ich tun möchte, ist diese Beschreibungen zu den Header eines Gridview zuschreiben und dass ich dachte Indizes verwenden, wie dieser Pseudo-Code:

for i=0 until 49 
e.Row.Cells[i].Text = Evaluate(Dim.d(i+1)) 

Also, im Grunde, ich brauche eine Art und Weise zu ändern, der Aufruf an meine Objekteigenschaften hängt vom Index ab, aber ich weiß nicht ob es möglich ist. Wenn index i=0, rufen Dim.d1, wenn index i=1 Anruf Dim.d2, und so weiter, bis 50.

Irgendwelche Ideen?

+3

'Dim' scheint nicht, wie es der beste Name für sein würde, zu verwenden, eine Variable in vb.net – juharr

Antwort

1

Sie können im System.Reflection Namespace-Methoden verwenden, um dies zu tun. Die Antwort wird jedoch gegeben, um die Frage zu beantworten - Sie sollten sich einige der Optionen ansehen, die von anderen Beantwortern vorgeschlagen wurden, z. Verwenden Sie eine List(Of String) oder etwas ähnliches.

Wie auch immer, lassen Sie uns sagen, Sie haben eine Klasse:

Public Class Class1 
    Public Property d1 As String 
    Public Property d2 As String 
    Public Property d3 As String 

End Class 

Und dann, sagen wir, Sie eine Instanz dieser Klasse erstellen und seine Eigenschaften festgelegt:

Dim obj As New Class1 
obj.d1 = "Foo" 
obj.d2 = "Bar" 
obj.d3 = "Test" 

Wenn Sie dann haben wollen eine Schleife von 1 bis 3 und Zugang z d1, d2, d2 etc dann ist dies, wenn Sie Reflection verwenden:

For i As Integer = 1 To 3 
    Dim info As System.Reflection.PropertyInfo = obj.GetType().GetProperty("d" & i) 
    Dim val As String = info.GetValue(obj, Reflection.BindingFlags.GetProperty, Nothing, Nothing, Nothing) 
    Debug.Print(val.ToString) 
Next 

Werden Sie den Ausgang geben:

Foo 
Bar 
Test 
+0

Hallo Robin! Ich denke, das ist genau das, was ich suche. Aber ich brauche es für C#. Ich werde es mit den jeweiligen Änderungen versuchen. Es gab ein Missverständnis, da mein Objekt Dim (kurz für Dimension) und hat nichts mit VB.net Variable zu tun. –

+0

Die Schlüsselübersetzungen wären 'System.Reflection.PropertyInfo info = obj.GetType(). GetProperty (" d "+ i);' und 'string val = info.GetValue (obj, Reflection.BindingFlags.GetProperty, null, null , null); '. Check out http://converter.telerik.com/ –

+0

Es funktionierte Mann! Genau das, was ich brauchte! Vielen Dank =) –

3

Dafür gibt es Arrays oder Listen!

var dim = new string[50]; 
dim[0] = "Description A"; 
dim[1] = "Description B"; 
..// etc 

for(var i=0;i<49;i++) 
{ 
    e.Row.Cells[i].Text = dim[i]; 
} 
+0

Ich wollte vermeiden, den Code 50 Mal zu schreiben, weil es mehr oder weniger sein kann ... Für jetzt habe ich 50 Beschreibungen, aber in der Zukunft kann mehr sein, so dass dies dynamisch sein muss. –

+0

Also verwenden Sie eine 'Liste ' und rufen '.Add (" Beschreibung ")' – Jamiec

0

Wie Jamiec bereits geschrieben, verwenden Sie ein Array oder eine Liste. Woher kommen die Beschreibungsetiketten?

Wenn Sie Ihre Beschreibungen in einem Komma getrennte Zeichenfolge haben, hier ist der vb.net Code:

dim descriptions as String = "Description A,Description B,Description C" 
dim myArray as String() = descriptions.Split(cchar(",")) 

for i as Integer = 1 To myArray.Length 
    e.Row.Cells(i-1).Text = myArray(i) 
Next 
+0

Hallo Ulli. Ja, ich merke jetzt, dass ich in meiner Frage vielleicht nicht klar war. "Beschreibung A" oder "Beschreibung B" waren nur Beispiele (ich kann das echte Ding nicht setzen, da privilegierte Informationen meiner Firma sind. Aber, Beschreibungen kommen von linq, von einer Frage in einer Datenbank, die eine Linie in diesem zurückgibt Fall, mit 50 Spalten, von denen jede die berüchtigten Beschreibungen enthält, deshalb bin ich mir nicht sicher, wie man List oder Array wirklich benutzt, zumindest ohne die 50 Beschreibungen von Hand zu schreiben.Ich denke, Reflection ist der Weg, es zu tun, aber zu haben keine Ahnung, wie. –