Устранение неполадок Исключение несоответствия счетчика параметров при вызове PropertyInfo.GetValue - PullRequest
0 голосов
/ 16 мая 2019

Мне было интересно, если кто-нибудь может указать мне в правильном направлении.

Этот код вызывает ошибку несоответствия счетчика параметров.
Исключение несоответствия счетчика параметров при вызове 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 работает всякий раз, когда это работает.Есть мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...