2008-10-07 126 views
64

¿Hay alguna manera de tomar un nombre de clase y convertirlo en una cadena en C#?Obtener el nombre de una clase como una cadena en C#

Como parte de Entity Framework, el método .Include tiene una lista de cadenas delimitada por puntos para unirse cuando se realiza una consulta. Tengo el modelo de clase de lo que quiero unir, y por razones de refactorización y mantenimiento de código futuro, quiero poder tener seguridad en tiempo de compilación al hacer referencia a esta clase.

Por lo tanto, hay una manera de que yo pudiera hacer esto:

class Foo 
{ 
} 

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

no creo que pueda hacer GetType() sin una instancia. ¿Algunas ideas?

Respuesta

97

No se puede usar .GetType() sin una instancia porque GetType es un método.

Usted puede obtener el nombre del tipo, aunque de esta manera:

typeof(Foo).Name 

Y como señala Chris, si necesita el nombre calificado asamblea se puede utilizar

typeof(Foo).AssemblyQualifiedName 
2
typeof(Foo).ToString() 

?

0

Puede utilizar un DbSet<contact> en lugar de ObjectSet<contact>, para que pueda utilizar lambda como un parámetro, por ejemplo tblBar.Include(a => a.foo)

8

También podría hacer algo como esto:

Type CLASS = typeof(MyClass); 

Y a continuación, puedes acceder a la nombre, espacio de nombres, etc.

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

Otra alternativa que utiliza la reflexión es utilizar la clase MethodBase.

En su ejemplo, puede agregar una propiedad estática (o método) que le proporcione la información que desea. Algo así como:

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

lo que permitiría que lo use sin generar una instancia del tipo:

tblBar.Include(Foo.ClassName); 

cual en tiempo de ejecución le dará:

tblBar.Include("Foo"); 
Cuestiones relacionadas