Ich schreibe einen Validierungscode. Der Code wird Daten an einen Web-Service übergeben und entscheiden, ob er die Aktion ausführen kann, oder eine Nachricht an den Anrufer, dass sie einige Felder verpasst haben.Wie gehe ich mit Arrays mit Reflektion um
Ich habe es am meisten funktioniert außer für Arrays. Ich markiere die Eigenschaften mit einem [RequiredField] -Attribut, um benötigte Felder darzustellen. Wenn das also einige meiner Daten sind,
Also was habe ich zu arbeiten? Ich habe Validierungen von Daten und Strings funktioniert. Es verwendet Rekursion, um eine beliebige Tiefe zu erreichen, die für die Daten erforderlich ist.
Aber ... so was ist mit den beiden Arrays dort. Der erste ist eine Reihe von Enums. Ich möchte in diesem Fall überprüfen, dass das Array nicht leer ist.
Die zweite ist das Array von DummyWebserviceData2-Werten. Ich muss jeden Wert herausziehen und einzeln betrachten.
den Code ich so sieht es aus, scheint
foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsArray)
{
// this craps out
object[] array = (object[])propertyInfo.GetValue(data, new object[] { 0 });
}
}
So etwas geschrieben haben, zu vereinfachen es mir, dass die erste Sache ist, dass ich sagen kann, es ist ein Array. Aber wie kann ich dann sagen, wie viele Gegenstände im Array sind?
beachten Sie nur, dass Sie nicht die IList oder ICollection Interface-Implementierung verwenden können, um die Array-Inhalt zu ändern - wie die oben erwähnten MDSN Thema Staaten - sie alle werfen 'NotSupportedException' –
Richtig. Ich recherchierte und stieß auf vieles, was Sie oben erwähnt haben. Was ich auch gemacht habe ist, dass der Array-Rang tatsächlich 1 ist. Ansonsten könnte das Array Array [] [] sein. Danke für Ihre Hilfe. Sehr geschätzt. – peter
+1 für den 'Cast()' Vorschlag. . 'MyType [] a = ((Array) propertyInfo.GetValue (Daten)) Guss() .ToArray();' –