2010-07-02 63 views
3

當你的變量類型,你可以檢查它的名字:定義的類型名稱在哪裏?

if (my_type.Name=="Int32") 

但它會更優雅寫

if (my_type.Name==TypeNames.Int32) 

避免錯別字。我可以自己定義這樣的類,但是也許已經定義了某處?

如果是,在哪裏?


注意:請避免疑惑「爲什麼你想獲得該變量的類型放在首位」,「最好是用‘是’」和一致好評。非常感謝你!


編輯:同時,我跳進結論,這將是足以忽略的對象(my_type變量)的類型和檢查對象來代替。換句話說,my_type不是必需的。我忘了空的情況下:-(更少的代碼,多睡覺,這就是我需要;-)

+6

爲什麼不檢查類型本身? if(my_type == typeof(int)) – Arseny 2010-07-02 08:11:30

+2

如果你想要的答案不問明顯的問題,你應該*回答*這些問題,而不是僅僅說不問問他們。否則,我們不會知道*爲什麼*正常的方法不適合你。 – 2010-07-02 08:21:51

+0

@macias怎麼回事?他們都可以比較GetType和typeof返回類型。 – Arseny 2010-07-02 08:22:45

回答

16

請嘗試以下

typeof(Int32).Name 

如果要比較的類型,雖然名字這樣做是不是最好的因爲在許多情況下它會是錯誤的。直接比較類型更爲正確。

if (m_type == typeof(Int32)) { 
    ... 
} 
+0

我標記了你的評論作爲我的問題的答案,因爲它非常好,但只是出於好奇,我仍然對獲得「真實」答案感興趣。再次感謝你。 – greenoldman 2010-07-02 08:24:17

+1

@macias:你確切的問題的簡單答案是,「不,沒有這樣的班級 - 因爲不需要。」 – 2010-07-02 08:27:47

+1

但是這*是你問題的真正答案......問:「類型名稱在哪裏定義?」 A:「在Type.Name屬性中」 – 2010-07-02 08:28:08

2

類型名稱未在類中的任何位置定義。它們在運行時由CLR(通過調用外部函數ConstructName)使用反射生成。

使用JaredPar的建議將完成這項工作。

+1

它們存儲在彙編元數據中的某處:您訪問這個元數據的方式是通過'Type'類。 – 2010-07-02 08:29:02

+0

@Tim Robinson:當然,他們必須存儲在某個地方。我錯過了一些重要的東西......沒有足夠的咖啡;-) – 2010-07-02 08:39:08