Получить имя класса в виде строки в C#


есть ли способ, чтобы взять имя класса и преобразовать его в строку в C#?

как часть Entity Framework, the .Метод Include принимает список строк, разделенных точками, для объединения при выполнении запроса. У меня есть модель класса того, к чему я хочу присоединиться, и по причинам рефакторинга и будущего обслуживания кода я хочу иметь возможность иметь безопасность во время компиляции при ссылке на этот класс.

таким образом, есть ли способ, что я мог сделать это:

class Foo
{
}

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

Я не думаю, что я могу сделать GetType() без экземпляра. Есть идеи?

6 65

6 ответов:

включить требуется имя свойства, а не имя класса. Следовательно, это имя свойства, которое вы хотите, а не имя его типа. вы можете получить это с отражением.

вы не можете использовать .GetType() без экземпляра, потому что GetType - Это метод.

вы можете получить имя от типа, хотя так:

typeof(Foo).Name

и, как указал Крис, если вам нужно полное имя сборки, вы можете использовать

typeof(Foo).AssemblyQualifiedName

вы также можете сделать что-то вроде этого:

Type CLASS = typeof(MyClass);

и затем вы можете просто открыть имя, пространство имен и т. д.

 string CLASS_NAME = CLASS.Name;
 string NAMESPACE = CLASS.Namespace;
typeof(Foo).ToString()

?

можно использовать DbSet<contact> вместо ObjectSet<contact>, Так что вы можете использовать лямбда-выражение в качестве параметра, например 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");