2013-08-30 44 views
1

這是我的代碼:如何擴展類型類

bool ch=Type.IsBuiltIn("System.Int32"); // not working-> syntax error 


public static class MyExtentions 
    {    
     public static bool IsBuiltIn(this Type t, string _type) 
     { 
      return (Type.GetType(_type) == null) ? false : true; 
     } 
    } 

請我想IsBuiltIn新方法

+0

這裏你不需要擴展方法 –

+0

把'typeof(int).IsBuiltIn'寫到你的編輯器中。你看到了什麼? – I4V

+0

您傳遞給IsBuiltIn()方法的字符串應該是該類型的程序集限定名稱。我的意思是你應該通過System.Int32 insted只是int – Dimitri

回答

6

您不能有靜態擴展方法。您的擴展方法適用於Type類的一個實例,所以叫它你必須做這樣的事情:

typeof(Type).IsBuiltIn("System.Int32") 

這種情況的解決方法是,只要把你的擴展方法的實用類,例如像下面,並把它像一個正常的靜態函數:

public static class TypeExt 
{    
    public static bool IsBuiltIn(string _type) 
    { 
     return Type.GetType(_type) == null; 
    } 
} 

// To call it: 
TypeExt.IsBuiltIn("System.Int32") 

順便說一句,我不認爲這會告訴你的類型是否「內置」;它只會告訴你是否已將具有給定名稱的類型加載到進程中。

0

擴展類型類不能擴展的Type類。您需要該類的一個實例來創建擴展方法。

編輯: 請參閱herehere

+0

爲什麼?你爲什麼不能這樣做? –

+0

你爲什麼低調?看我的編輯。 – Loetn

+0

@SriramSakthivel不,你需要一個類類型的實例。你不能擴展類的類型。 – Maarten

3

擴展方法旨在描述實例的新API,而不是類型。在你的情況下,該API將是這樣的:

Type someType = typeof(string); // for example 
bool isBuiltIn = someType.IsBuiltIn("Some.Other.Type"); 

其中......顯然不是你想要的; type這裏什麼也不加,並且與IsBuiltIn沒有關係。沒有編譯器技巧用於將新的靜態方法添加到現有類型,基本上 - 因此您將無法使用Type.IsBuiltIn("Some.Other.Type")