Мне было интересно, если кто-нибудь может указать мне в правильном направлении.
Этот код вызывает ошибку несоответствия счетчика параметров.
Исключение несоответствия счетчика параметров при вызове PropertyInfo.GetValue.Я не могу сделать это в наших условиях.Это происходит для производственной среды одного клиента из 5 наших клиентов, которые используют этот код.
private string getValueFromType(object obj, string type, Type targetClassType, Type currentClassType = null)
{
//Reflection to find value for Jack Henry type mapped to specific OnBase KeywordType
if (obj == null)
{
return String.Empty;
}
var objType = obj.GetType();
if (objType == targetClassType)
{
currentClassType = objType;
}
var properties = objType.GetProperties();
var value = String.Empty;
foreach (var property in properties)
{
var propValue = property.GetValue(obj, null);
var elems = propValue as IList;
if (elems != null)
{
foreach (var item in elems)
{
value = this.getValueFromType(item, type, targetClassType, currentClassType);
if (value != String.Empty)
{
return value;
}
}
}
else
{
if (property.PropertyType.Assembly.FullName.StartsWith("JackHenry"))
{
value = this.getValueFromType(propValue, type, targetClassType, currentClassType);
if (value != String.Empty)
{
return value;
}
}
else
{
if (currentClassType == targetClassType && objType.FullName == type && property.Name == "Value")
{
return propValue.ToString();
}
}
}
}
return value;
}
Я исследовал его, и в некоторых публикациях говорилось, что это связано с тем, что тип объекта имеет индексированное свойство, и выпередача значения null параметру index при вызове GetValue.Таким образом, решение было
var properties = objType.GetProperties().Where(p => p.GetIndexParameters().Length == 0);
Но я хотел бы понять, почему существующий код без строки indexedparameters работает всякий раз, когда это работает.Есть мысли?