在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");