有没有办法在C#中取得类名并将其转换为字符串?以C#中字符串的形式获取类的名称
作为实体框架的一部分,.Include方法需要在执行查询时加入点分隔的字符串列表。我有我想要加入的类模型,由于重构和未来代码维护的原因,我希望在引用此类时能够具有编译时安全性。
因此,是有办法,我可以这样做:我不认为没有一个实例,我可以做的GetType()
class Foo
{
}
tblBar.Include (Foo.GetType().ToString());
。有任何想法吗?
有没有办法在C#中取得类名并将其转换为字符串?以C#中字符串的形式获取类的名称
作为实体框架的一部分,.Include方法需要在执行查询时加入点分隔的字符串列表。我有我想要加入的类模型,由于重构和未来代码维护的原因,我希望在引用此类时能够具有编译时安全性。
因此,是有办法,我可以这样做:我不认为没有一个实例,我可以做的GetType()
class Foo
{
}
tblBar.Include (Foo.GetType().ToString());
。有任何想法吗?
Include requires a property name,不是类名。因此,它是您想要的财产的名称,而不是其类型的名称。 You can get that with reflection。
无法使用.GetType()
,因为GetType
是一种方法。
你可以从类型的名字虽然是这样的:
typeof(Foo).Name
正如克里斯指出的那样,如果你需要的装配合格的名称,你可以使用
typeof(Foo).AssemblyQualifiedName
typeof(Foo).ToString()
?
您可以使用DbSet<contact>
代替ObjectSet<contact>
,所以你可以使用lambda作为一个参数,如tblBar.Include(a => a.foo)
你也可以做这样的事情:
Type CLASS = typeof(MyClass);
然后你可以访问名称,名称空间等。
string CLASS_NAME = CLASS.Name;
string NAMESPACE = CLASS.Namespace;
另一种使用反射的替代方法是使用MethodBase类。
在您的示例中,您可以添加一个静态属性(或方法),为您提供所需的信息。喜欢的东西:
class Foo
{
public static string ClassName
{
get
{
return MethodBase.GetCurrentMethod().DeclaringType.Name;
}
}
}
这将允许你使用它,而不会产生类型的实例:
tblBar.Include(Foo.ClassName);
其中在运行时会给你:
tblBar.Include("Foo");
感谢克雷格,我我发现这也有帮助:http://msmvps.com/blogs/matthieu/archive/2008/06/06/entityframework-include-with-func.aspx – Jared 2011-02-16 23:41:56