2010-06-30 67 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

相關問題