Я делаю несколько простых проверок работоспособности для различных типов. Текущий тест, над которым я работаю, проверяет, заполнены ли их свойства. В этом случае заполненный определяется как ненулевой, имеющий длину больше нуля (если строка) или не равную 0 (если целое число).
«Хитрая» часть этого теста состоит в том, что некоторые свойства невосприимчивы к этой проверке. Сейчас я использую гигантский оператор if, который отсеивает свойства, которые не нужно проверять.
//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.
}
}
При профилировании я заметил, что оператор if на самом деле работает хуже, чем отражение (не то, что отражение быстро светится). Есть ли более эффективный способ фильтрации свойств нескольких разных типов?
Я думал о массивном регулярном выражении, но я не уверен, как его отформатировать, плюс оно, вероятно, было бы нечитаемым, учитывая его размер. Я также рассмотрел вопрос о сохранении значений в List и последующем использовании Linq, но я не уверен, как обрабатывать случаи, в которых используется String.IndexOf (), чтобы определить, содержит ли свойство определенное значение.
Заранее спасибо.