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

Есть ли способ взять имя класса и преобразовать его в строку в С#?

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

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

class Foo
{
}

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

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

Ответ 2

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

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

typeof(Foo).Name

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

typeof(Foo).AssemblyQualifiedName

Ответ 3

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

Type CLASS = typeof(MyClass);

И тогда вы можете просто получить доступ к имени, пространству имен и т.д.

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

Ответ 4

typeof(Foo).ToString()

?

Ответ 5

Вы можете использовать DbSet<contact> вместо ObjectSet<contact>, поэтому вы можете использовать lambda в качестве параметра, например tblBar.Include(a => a.foo)

Ответ 6

Другой альтернативой, использующей отражение, является использование класса MethodBase.

В вашем примере вы можете добавить статическое свойство (или метод), которое предоставит вам необходимую информацию. Что-то вроде:

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

Это позволит вам использовать его без генерации экземпляра типа:

tblBar.Include(Foo.ClassName);

Что во время выполнения даст вам:

tblBar.Include("Foo");