2016-12-05 6 views
0

Derzeit versuchen, einen Weg zu finden, um den Typ einer generisch typisierten Klasse zu bekommen und haben keine Möglichkeit gefunden, dies zu tun. Meine aktuelle, Arbeitsweise sieht wie folgt aus:C# mvc get generic type mit Reflektion

public class CategoryConfiguration : EntityTypeConfiguration<Category> 
    { 
     public CategoryConfiguration() 
     { 
      ToTable("Categories"); 
      Property(c => c.Name).IsRequired().HasMaxLength(50); 
     } 
    } 

und ich mag diese Methode ändern, etwas zu sein wie:

public class CategoryConfiguration : EntityTypeConfiguration<T> 
    { 
     public CategoryConfiguration() 
     { 
      ToTable(/*get string representation of 'T' here and pluralize*/); 
      Property(c => c.Name).IsRequired().HasMaxLength(50); 
     } 
    } 

Antwort

6

Ich glaube, Sie tun können:

ToTable(typeOf(T).Name); 

Und über Pluralisierung lesen Sie bitte this

+2

in C# 6.0 Sie können nameof verwenden (T) – Ali7091

1

Wenn Sie einen Klassennamen sehen möchten, verwenden Sie nameof(T). Oder wenn Sie eine andere Namensumgrenzung mit dem Typ T sehen möchten, können Sie zum Beispiel einen Attribute, Description verwenden (lesen Sie hier: https://msdn.microsoft.com/ru-ru/library/system.componentmodel.descriptionattribute(v=vs.110).aspx), und erhalten Sie den Wert davon.

Zum Beispiel:

[Description("/*name, which you would like to see*/")] 
public class Category 
{ 
    /* your class realization */ 
} 

Und in CategoryConfiguration Verwendung

ToTable((typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), true) 
        .First() as DescriptionAttribute) 
        .Description);