在C#中将类的名称作为字符串获取

时间:2008-10-07 18:14:46

标签: c# entity-framework

有没有办法获取类名并将其转换为C#中的字符串?

作为Entity Framework的一部分,.Include方法在执行查询时接受以点分隔的字符串列表以加入。我有我想要加入的类模型,出于重构和未来代码维护的原因,我希望能够在引用这个类时具有编译时的安全性。

因此,有没有办法可以做到这一点:

class Foo
{
}

tblBar.Include ( Foo.GetType().ToString() );

我认为没有实例我不能做GetType()。有什么想法吗?

6 个答案:

答案 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");