2008-10-07 14 views
64

Czy istnieje sposób na pobranie nazwy klasy i przekonwertowanie jej na ciąg znaków w języku C#?Uzyskaj nazwę klasy jako ciąg znaków w języku C#

W ramach struktury Entity, metoda .Include przyjmuje listę ciągów rozdzielaną kropkami, aby dołączyć podczas wykonywania zapytania. Mam model klasy tego, co chcę dołączyć, i ze względu na refaktoryzację i przyszłe utrzymanie kodu, chcę mieć możliwość kompilacji bezpieczeństwa podczas odwoływania się do tej klasy.

Zatem, czy jest jakiś sposób, że mogę to zrobić:

class Foo 
{ 
} 

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

Nie sądzę, mogę zrobić GetType() bez instancji. Jakieś pomysły?

Odpowiedz

97

Nie można użyć .GetType() bez instancji, ponieważ metoda jest GetType.

można uzyskać nazwę od rodzaju chociaż tak:

typeof(Foo).Name 

I jak podkreślił Chris, jeśli potrzebujesz montażu kwalifikowanej nazwy można użyć

typeof(Foo).AssemblyQualifiedName 
0

Można użyć DbSet<contact> zamiast ObjectSet<contact>, dzięki czemu można używać lambda jako parametr, np tblBar.Include(a => a.foo)

8

Można też zrobić coś takiego:

Type CLASS = typeof(MyClass); 

a następnie można tylko uzyskać dostęp do nazwa, przestrzeń nazw itp.

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

Inną alternatywą przy użyciu refleksji jest użycie klasy MethodBase.

W tym przykładzie można dodać właściwość (lub metodę) statyczną, która zapewni żądane informacje. Coś jak:

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

które pozwoliłyby Ci na używanie go bez generowania wystąpienie typu:

tblBar.Include(Foo.ClassName); 

który na starcie daje:

tblBar.Include("Foo");