- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我在使用反射转储某些对象属性的例程中遇到此错误,类似于下面的代码。
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 的类型上调用方法。”
这个阶段在调试器中obj表现为
{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。
我尝试检查 obj 和 p.PropertyType 上的 isGenericParameter,但这对于大多数属性(包括那些 p.GetValue 起作用的属性)来说似乎是错误的。
那么“Type.IsGenericParameter 为真的类型”到底是什么,更重要的是如何在没有 try/catch 的情况下避免此错误?
最佳答案
So what exactly is a "Type for which Type.IsGenericParameter is true"
这意味着它是开放泛型类型中的泛型类型参数——也就是说,我们还没有选择 T
;例如:
// true
bool isGenParam = typeof(List<>).GetGenericArguments()[0].IsGenericParameter;
// false (T is System.Int32)
bool isGenParam = typeof(List<int>).GetGenericArguments()[0].IsGenericParameter;
所以;你有一些开放的泛型吗?也许您可以举例说明您从哪里获得 obj
?
关于c# - 只能在 Type.IsGenericParameter 为 true 的类型上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1346238/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!