2010-06-30 59 views
2

我正在使用反射,当我得到参数的方法列表,我需要检查所有这些,当我找到任何一个它的类型是数组我需要避免它,我的意思是阵列任何一种的,所以我用不工作的情况如下:如何知道参数是一个数组?

(!(parameter.GetType().Equals(Array))) 

错误是,我使用一个类型的变量!我能做些什么来完成这个任何建议?

回答

1

使用类型('数组')作为变量。 “System.Type”类型的变量(表示类型)和实际类型之间存在差异。要将类型转换为System.Type,请使用typeof(type)。

现在,您不希望所有的东西都是Array类型的东西,而是那些可以分配给Array类型的对象(即Array或其后代)的对象。这有点倒退,但要做到这一点的方法是看看System.Type是否可以从System.Type中为变量的类型赋值。

所以,作为一个通用的模式,你想尝试这样的:

(!(typeof(Array).IsAssignableFrom(parameter.GetType()))) 

然而,正如另一种答案显示,System.Type的具有跳过此为您的IsArray的财产,只要你是处理一个实际的数组(int [],bool []等),而不是一个自定义的数组后代(例如像CustomArrayClass:Array)。

+0

你写的这两个答案,没有工作,他们返回false!我厌倦了许多类型,但它只是返回假而已! – Lisa 2010-06-30 01:40:07

+0

它应该返回false?它有一个(“!”),这就是你想要的(如果不是数组?) – 2010-06-30 01:53:17

+0

我的意思是没有(!)。不管怎样,谢谢你的基本想法。 – Lisa 2010-06-30 02:02:54

5

尝试

(!(parameter.GetType().IsArray)) 

注 - 从MSDN:

的IsArray的属性返回 Array类假。

要检查数组,请使用代码 作为 typeof(Array).IsAssignableFrom(type)。

如果当前Type表示 通用类型,或在 通用型或 通用方法的定义的类型参数,这个属性总是 返回false。

也就是说如果你有简单的数组声明如int [],字符串[],等等等等,在IsArray是好的,但如果没有,那么你将不得不使用IsAssignableFrom()

0

由于我使用的参数,我不应该用“的GetType”,像这样:

(!(typeof(Array).IsAssignableFrom(parameter.GetType()))) 

这只适用于分配的对象,通过参数这将返回类型的ParameterInfo

对于参数,“参数类型”,应使用和答案将是这样的:

(!(typeof(Array).IsAssignableFrom(parameter.ParameterType))) 
+0

你没有提到你正在使用parameterinfo。这暗示参数是你的一个参数的名字(例如传入的一个对象)。很高兴看到你解决了它。 – 2010-06-30 02:09:08

相关问题