2016-12-05 2 views
0

В настоящее время вы пытаетесь найти способ получить тип типично типизированного класса и не смогли найти способ сделать это. Мой текущий, метод работы выглядит следующим образом:C# mvc get generic type using reflection

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

, и я хотел бы изменить этот метод, чтобы быть что-то вроде:

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

ответ

6

Я думаю, что вы можете сделать:

ToTable(typeOf(T).Name); 

А насчет плюрализации читайте this

+2

в C# 6.0 вы можете использовать nameof (T) – Ali7091

1

Если вы хотите, чтобы увидеть название класса, используйте nameof(T). Или, если вы хотите увидеть другое имя, связанное с типом T, вы можете использовать, например, Attribute, Description (читайте здесь: https://msdn.microsoft.com/ru-ru/library/system.componentmodel.descriptionattribute(v=vs.110).aspx) и получите его значение.

Например:

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

И в CategoryConfiguration использование

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