【发布时间】:2011-06-03 16:10:36
【问题描述】:
我有一个 C# 方法说:
MyMethod(int num, string name, Color color, MyComplexType complex)
使用反射,我怎样才能清楚地识别任何方法的每个参数类型? 我想按参数类型执行一些任务。如果类型是简单的 int、string 或 boolean,那么我会做一些事情,如果是 Color、XMLDocument 等,我会做其他事情,如果是用户定义的类型,如 MyComplexType 或 MyCalci 等,那么我想做某些任务。
我能够使用 ParameterInfo 检索方法的所有参数,并且可以遍历每个参数并获取它们的类型。但是如何识别每种数据类型呢?
foreach (var parameter in parameters)
{
//identify primitive types??
//identify value types
//identify reference types
}
编辑:这是我的代码的一部分,用于创建属性网格类型的页面,我想在其中显示带有所选方法的数据类型的参数列表。如果参数有任何用户定义的类型/引用类型,那么我想进一步扩展它以显示它下面的所有元素和数据类型。
【问题讨论】:
-
你到底想对复杂类型参数做什么?
-
你有一个比这远更大的问题,你将如何生成正确的值来进行调用?想一想,答案就会浮出水面。查看 dynamic 关键字。
-
@mace,基本上,我正在尝试创建一个属性页面之类的东西,页面应该显示参数和类型。如果它是像 MyComplexType 这样的引用类型,那么我将扩展该类型以在其中查找其他类型。如果它不是像 int、string 或 color 这样的引用类型,那么我不需要检查它。希望你明白我的意思。
标签: c# reflection methods types