Ich führe eine einfache Validierung verschiedener Typen durch. Der aktuelle Test, an dem ich arbeite, überprüft, ob ihre Eigenschaften ausgefüllt sind. In diesem Fall ist "gefüllt" definiert als "nicht null", "eine Länge größer als null" (bei einer Zeichenkette) oder "ungleich 0" (bei einer Ganzzahl).
Der "heikle" Teil dieses Tests besteht darin, dass einige Eigenschaften gegen diese Prüfung immun sind. Im Moment verwende ich eine riesige if-Anweisung, die Eigenschaften ausschließt, die nicht geprüft werden müssen.
//Gets all the properties of the currect feature.
System.Reflection.PropertyInfo[] pi = t.GetProperties();
for(int i = 0; i < pi.Length; i++)
{
if(!pi[i].Name.Equals("PropertyOne")
&& !pi[i].Name.Equals("PropertyTwo")
&& !pi[i].Name.Equals("PropertyThree")
//... repeat a bunch more times
&& !pi[i].Name.IndexOf("ValueOne") != -1
&& !pi[i].Name.IndexOf("ValueTwo") != -1
//... repeat a bunch more times
{
//Perform the validation check.
}
}
Bei der Profilerstellung bemerkte ich, dass die if-Anweisung tatsächlich schlechter als die Reflexion durchgeführt wird (nicht, dass die Reflexion blitzschnell ist). Gibt es einen effizienteren Weg, um die Eigenschaften von mehreren verschiedenen Typen zu filtern?
Ich habe über eine massive regulären Ausdruck gedacht, aber ich bin unsicher, wie es zu formatieren, plus es wäre wahrscheinlich unlesbar angesichts seiner Größe. Ich habe auch in Betracht gezogen, die Werte in einer Liste zu speichern und dann mit Linq, aber ich bin nicht sicher, wie die Fälle zu behandeln, die String.IndexOf() verwenden, um zu finden, wenn die Eigenschaft einen bestimmten Wert enthält.
Vielen Dank im Voraus.