Получить имя класса в виде строки в C#
есть ли способ, чтобы взять имя класса и преобразовать его в строку в C#?
как часть Entity Framework, the .Метод Include принимает список строк, разделенных точками, для объединения при выполнении запроса. У меня есть модель класса того, к чему я хочу присоединиться, и по причинам рефакторинга и будущего обслуживания кода я хочу иметь возможность иметь безопасность во время компиляции при ссылке на этот класс.
таким образом, есть ли способ, что я мог сделать это:
class Foo
{
}
tblBar.Include ( Foo.GetType().ToString() );
Я не думаю, что я могу сделать GetType() без экземпляра. Есть идеи?
6 ответов:
включить требуется имя свойства, а не имя класса. Следовательно, это имя свойства, которое вы хотите, а не имя его типа. вы можете получить это с отражением.
вы не можете использовать
.GetType()
без экземпляра, потому чтоGetType
- Это метод.вы можете получить имя от типа, хотя так:
typeof(Foo).Name
и, как указал Крис, если вам нужно полное имя сборки, вы можете использовать
typeof(Foo).AssemblyQualifiedName
вы также можете сделать что-то вроде этого:
Type CLASS = typeof(MyClass);
и затем вы можете просто открыть имя, пространство имен и т. д.
string CLASS_NAME = CLASS.Name; string NAMESPACE = CLASS.Namespace;
можно использовать
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");