在C#中以stringforms获取类的名称

有没有办法获得一个类名并将其转换为C#中的string?

作为entity framework的一部分,.Include方法需要在执行查询时join点分隔的string列表。 我有我想要join的类模型,由于重构和将来代码维护的原因,我希望能够在引用此类时具有编译时安全性。

因此,我有办法做到这一点:

class Foo { } tblBar.Include ( Foo.GetType().ToString() ); 

我不认为我可以做没有实例的GetType()。 有任何想法吗?

包含需要属性名称 ,而不是类名称。 因此,这是你想要的财产的名称,而不是它的types的名称。 你可以通过反思来获得 。

无法使用.GetType() ,因为GetType是一种方法。

你可以从types中得到这个名字,就像这样:

 typeof(Foo).Name 

正如Chris指出的那样,如果你需要assembly合格的名字,你可以使用

 typeof(Foo).AssemblyQualifiedName 

你也可以做这样的事情:

 Type CLASS = typeof(MyClass); 

然后你可以访问名称,命名空间等

  string CLASS_NAME = CLASS.Name; string NAMESPACE = CLASS.Namespace; 
 typeof(Foo).ToString() 

你可以使用DbSet<contact>而不是ObjectSet<contact> ,所以你可以使用lambda作为参数,例如tblBar.Include(a => a.foo)

使用reflection的另一种方法是使用MethodBase类。

在你的例子中,你可以添加一个静态属性(或方法),为你提供你想要的信息。 就像是:

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

这将允许您使用它而不生成types的实例:

 tblBar.Include(Foo.ClassName); 

在运行时会给你:

 tblBar.Include("Foo");