2008-10-07 34 views
64

有沒有辦法在C#中取得類名並將其轉換爲字符串?以C#中字符串的形式獲取類的名稱

作爲實體框架的一部分,.Include方法需要在執行查詢時加入點分隔的字符串列表。我有我想要加入的類模型,由於重構和未來代碼維護的原因,我希望在引用此類時能夠具有編譯時安全性。

因此,是有辦法,我可以這樣做:我不認爲沒有一個實例,我可以做的GetType()

class Foo 
{ 
} 

tblBar.Include (Foo.GetType().ToString()); 

。有任何想法嗎?

回答

97

無法使用.GetType(),因爲GetType是一種方法。

你可以從類型的名字雖然是這樣的:

typeof(Foo).Name 

正如克里斯指出的那樣,如果你需要的裝配合格的名稱,你可以使用

typeof(Foo).AssemblyQualifiedName 
2
typeof(Foo).ToString() 

0

您可以使用DbSet<contact>代替ObjectSet<contact>,所以你可以使用lambda作爲一個參數,如tblBar.Include(a => a.foo)

8

你也可以做這樣的事情:

Type CLASS = typeof(MyClass); 

然後你可以訪問名稱,名稱空間等。

string CLASS_NAME = CLASS.Name; 
string NAMESPACE = CLASS.Namespace; 
0

另一種使用反射的替代方法是使用MethodBase類。

在您的示例中,您可以添加一個靜態屬性(或方法),爲您提供所需的信息。喜歡的東西:

class Foo 
{ 
    public static string ClassName 
    { 
     get 
     { 
      return MethodBase.GetCurrentMethod().DeclaringType.Name; 
     } 
    } 
} 

這將允許你使用它,而不會產生類型的實例:

tblBar.Include(Foo.ClassName); 

其中在運行時會給你:

tblBar.Include("Foo"); 
相關問題