Я получаю эту ошибку в подпрограмме, которая использует отражение, чтобы вывести некоторые свойства объекта, что-то вроде кода ниже.
MemberInfo[] members = obj.GetType().GetMembers(BindingFlags.Public | BindingFlags.Instance) ;
foreach (MemberInfo m in members)
{
PropertyInfo p = m as PropertyInfo;
if (p != null)
{
object po = p.GetValue(obj, null);
...
}
}
Фактическая ошибка: «Исключение было сгенерировано целью вызова»
с внутренним исключением «Метод может быть вызван только для типа, для которого Type.IsGenericParameter имеет значение true».
На этом этапе в отладчике объект отображается как
{Name = "SqlConnection" FullName = "System.Data.SqlClient.SqlConnection"}
с типом System.RuntimeType
Метод m является {System.Reflection.MethodBase DeclaringMethod}
Обратите внимание, что объект obj имеет тип System.RuntimeType и содержит 188 элементов, тогда как простой
typeof (System.Data.SqlClient.SqlConnection) .GetMembers (System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance) возвращает только 65.
Я попытался проверить isGenericParameter как для obj, так и для p.PropertyType, но, похоже, это неверно для большинства свойств, включая те, в которых работает p.GetValue.
Так что же такое «тип, для которого Type.IsGenericParameter имеет значение true» и, что более важно,
как избежать этой ошибки без попытки / улова?