2016-05-03 2 views
0

Ich habe zwei Klassen:C# - Reflexion - Get Anstand Array in jedem Index

public class Car 
{ 
    public string color { get; set; } 
    public string model { get; set; } 
} 

public class myclass 
{ 
    public Car[] car { get; set; } 
} 

und eine Instanz:

myclass c = new myclass() 
{ 
    car = new Car[] 
    { 
     new Car() 
     { 
      color = "blue", 
      model = "my model" 
     }, 
     new Car() 
     { 
      color = "green", 
      model = "my model 2" 
     } 
    } 
}; 

var car = c.GetType().GetProperty("car").GetValue(c, null); 

var Auto =:

var car

Wie kann ich alle Indizes des Arrays car durchlaufen und die Eigenschafterhalten?

Antwort

1

Eine weitere generische Art, wird versuchen, es in IEnumerable konvertieren, so dass Ihre Sammlung nicht binden an Array allein sein wird.

1

Wenn Sie Reflektion verwenden müssen den Looping zu tun, könnten Sie so etwas wie dies versuchen:

//gets the value of myclass's car property--an array of type Car[] returned as an object 
var cars = c.GetType().GetProperty("car").GetValue(c, null); 

if (cars.GetType().IsArray)//should be true for you 
{ 
    //gets the type of the elements of the array: Car 
    var carArrayElementType = cars.GetType().GetElementType(); 

    //gets the color property of Car 
    var colorProp = carArrayElementType.GetProperty("color"); 

    //lets you loop through the cars array 
    var carEnumerable = cars as IEnumerable; 

    foreach (var car in carEnumerable) 
    { 
     //returns the color property's value as a string 
     var color = colorProp.GetValue(car, null) as string; 

     //use color 
    } 
} 

Das heißt, die eher geradlinigen Weg zu Schleife über alle Indizes des Arrays car und die Eigenschaft erhalten color ohne Reflexion würde verwenden so etwas wie:

foreach(var car in c.car) 
{ 
    var color = car.color; 

    //use color 
} 
+0

danke, aber ich kenne den Typ Auto nicht. Wie verwende ich den dynamischen Typ für Auto? –

+0

Oh! Ich habe meine Antwort aktualisiert - ist das wonach Sie gesucht haben? – AGB

0

nicht sicher, was genau Sie fragen, von den Blicken von ihm dies nichts mit Reflexion zu tun hat ... Wenn Sie einfach alle Autos iterieren wollen in c.car können Sie eine Foreach- oder For-Schleife verwenden.

foreach (Car car in c.car) 
{ Console.Writeline(car.color); } 

for (int i = 0; i < c.car.length; ++i) 
{ Console.Writeline(c.car[i].color); } 

Durch das Aussehen davon jedoch haben Sie nicht die Grundlagen der Programmierung und C# Eigenschaften verstanden. Ich schlage vor, Sie finden einen Codestyle und bleiben dabei, generell würde ich UpperCamelCase für Eigenschaften und Klassen empfehlen. Sie sollten einen Blick auf microsofts documentation on properties

0

Ich glaube, Sie müssen nur das zurückgegebene Objekt von GetValue zu einem Auto [] -Array zu werfen und dann nur um es herumschleifen.

var cars = c.GetType().GetProperty("car").GetValue(c, null) as Car[]; 

foreach (Car c in cars) 
{ 
    Debug.WriteLine("the color is " + c.color.ToString()); 
}