【问题标题】:Get the name of a class as a string in C#在 C# 中以字符串形式获取类的名称
【发布时间】:2010-09-15 20:01:18
【问题描述】:

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

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

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

class Foo
{
}

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

我认为没有实例我无法执行 GetType()。有什么想法吗?

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    您不能在没有实例的情况下使用 .GetType(),因为 GetType 是一种方法。

    您可以像这样从类型中获取名称:

    typeof(Foo).Name
    

    正如 Chris 所指出的,如果您需要程序集限定名称,您可以使用

    typeof(Foo).AssemblyQualifiedName
    

    【讨论】:

      【解决方案2】:

      Include requires a property name,不是类名。因此,它是您想要的属性的名称,而不是其类型的名称。 You can get that with reflection.

      【讨论】:

      【解决方案3】:

      你也可以这样做:

      Type CLASS = typeof(MyClass);
      

      然后您就可以访问名称、命名空间等。

       string CLASS_NAME = CLASS.Name;
       string NAMESPACE = CLASS.Namespace;
      

      【讨论】:

        【解决方案4】:
        typeof(Foo).ToString()
        

        ?

        【讨论】:

          【解决方案5】:

          除了使用typeof(Foo).ToString(),您还可以使用nameof()

          nameof(Foo)
          

          【讨论】:

            【解决方案6】:

            您可以使用DbSet<contact> 代替ObjectSet<contact>,因此您可以使用lambda 作为参数,例如tblBar.Include(a => a.foo)

            【讨论】:

              【解决方案7】:

              另一种使用反射的方法是使用 MethodBase 类。

              在您的示例中,您可以添加一个静态属性(或方法),为您提供所需的信息。类似的东西:

              class Foo
              {
                  public static string ClassName
                  {
                      get
                      {
                          return MethodBase.GetCurrentMethod().DeclaringType.Name;
                      }
                  }
              }
              

              这将允许您在不生成该类型实例的情况下使用它:

              tblBar.Include(Foo.ClassName);
              

              在运行时会给你什么:

              tblBar.Include("Foo");
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2011-09-30
                • 1970-01-01
                • 2015-05-27
                • 2014-05-23
                • 2012-11-16
                • 2015-03-18
                相关资源
                最近更新 更多