有没有一种方法可以将C#中的类名转换为字符串?
作为Entity Framework的一部分,.Include方法接受点分隔的字符串列表,以在执行查询时连接。我有想要加入的类模型,并且出于重构和未来代码维护的原因,我希望能够在引用此类时具有编译时安全性。
因此,我是否可以这样做:
class Foo
{
}
tblBar.Include ( Foo.GetType().ToString() );
我认为在没有实例的情况下无法使用GetType()。 有什么建议吗?
有没有一种方法可以将C#中的类名转换为字符串?
作为Entity Framework的一部分,.Include方法接受点分隔的字符串列表,以在执行查询时连接。我有想要加入的类模型,并且出于重构和未来代码维护的原因,我希望能够在引用此类时具有编译时安全性。
因此,我是否可以这样做:
class Foo
{
}
tblBar.Include ( Foo.GetType().ToString() );
我认为在没有实例的情况下无法使用GetType()。 有什么建议吗?
如果没有实例,你不能使用.GetType()
,因为GetType
是一个方法。
但是你可以通过以下方式从类型中获取名称:
typeof(Foo).Name
正如 Chris 指出的那样,如果您需要程序集限定名称,则可以使用
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)
。另一个使用反射的替代方法是使用MethodBase类。
在您的示例中,您可以添加一个静态属性(或方法),以提供您想要的信息。例如:
class Foo
{
public static string ClassName
{
get
{
return MethodBase.GetCurrentMethod().DeclaringType.Name;
}
}
}
这将允许您在不生成类型实例的情况下使用它:
tblBar.Include(Foo.ClassName);
在运行时将会给你:
tblBar.Include("Foo");