我正在使用反射,当我获得参数的方法列表时,我需要检查所有这些,当我找到任何一个类型为数组时我需要避免它,我的意思是任何类型,所以我使用了以下不起作用:
(!(parameter.GetType().Equals(Array)))
错误是我使用类型作为变量!我能做些什么来做任何建议?
答案 0 :(得分:5)
尝试
(!(parameter.GetType().IsArray))
注意 - 来自MSDN:
IsArray属性为false返回false Array类。
要检查数组,请使用此类代码 如 typeof运算(阵列).IsAssignableFrom(类型)。
如果当前的Type代表a 泛型类型或类型参数 泛型类型的定义 泛型方法,这个属性总是如此 返回false。
这意味着如果您有简单的数组声明,如int [],string []等等,IsArray
就可以了,但如果没有,那么您将不得不使用IsAssignableFrom()
。
答案 1 :(得分:1)
你 使用类型('Array')作为变量。 “System.Type”类型的变量(表示类型)与实际类型之间存在差异。要将类型转换为System.Type,请使用typeof(type)。
现在,您不希望所有类型为Array的内容,而是那些可以分配给类型为Array的对象(即Array或其后代)的对象。这有点向后但是这样做的方法是查看System.Type for Array是否可以从System.Type为您的变量类型分配。
所以,作为一般模式,你想尝试这样的事情:
( !(typeof(Array).IsAssignableFrom(parameter.GetType())) )
但是,正如另一个答案所示,System.Type有一个IsArray属性可以为你跳过这个,只要你处理一个实际的数组(int [],bool []等)而不是自定义数组后代(例如CustomArrayClass:Array之类的东西)。
答案 2 :(得分:0)
当我使用参数时,我不应该使用“GetType”,如下所示:
( !(typeof(Array).IsAssignableFrom(parameter.GetType())) )
这仅适用于已分配的对象,参数将返回 parameterInfo 类型。
对于参数,应使用“ParameterType”,答案如下所示:
( !(typeof(Array).IsAssignableFrom(parameter.ParameterType)))