有没有办法获取类名并将其转换为C#中的字符串?
作为Entity Framework的一部分,.Include方法在执行查询时接受以点分隔的字符串列表以加入。我有我想要加入的类模型,出于重构和未来代码维护的原因,我希望能够在引用这个类时具有编译时的安全性。
因此,有没有办法可以做到这一点:
class Foo
{
}
tblBar.Include ( Foo.GetType().ToString() );
我认为没有实例我不能做GetType()。有什么想法吗?
答案 0 :(得分:100)
如果没有实例,则无法使用.GetType()
,因为GetType
是一种方法。
您可以从类型中获取名称,如下所示:
typeof(Foo).Name
正如克里斯所指出的,如果你需要装配限定名,你可以使用
typeof(Foo).AssemblyQualifiedName
答案 1 :(得分:12)
Include requires a property name,不是班级名称。因此,它是您想要的属性的名称,而不是其类型的名称。 You can get that with reflection
答案 2 :(得分:8)
您也可以这样做:
Type CLASS = typeof(MyClass);
然后你可以访问名称,命名空间等。
string CLASS_NAME = CLASS.Name;
string NAMESPACE = CLASS.Namespace;
答案 3 :(得分:2)
typeof(Foo).ToString()
答案 4 :(得分:0)
您可以使用DbSet<contact>
代替ObjectSet<contact>
,因此您可以将lambda用作参数,例如tblBar.Include(a => a.foo)
答案 5 :(得分:0)
使用反射的另一种方法是使用MethodBase类。
在您的示例中,您可以添加一个静态属性(或方法),为您提供所需的信息。类似的东西:
class Foo
{
public static string ClassName
{
get
{
return MethodBase.GetCurrentMethod().DeclaringType.Name;
}
}
}
允许您在不生成类型实例的情况下使用它:
tblBar.Include(Foo.ClassName);
在运行时会给你:
tblBar.Include("Foo");