2008-10-07 85 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"); 
相关问题