2009-04-27 5 views
42

Todos sabemos que cuando creamos una clase anónima como esto:¿Puedo especificar un nombre significativo para una clase anónima en C#?

var Employee = new { ID = 5, Name= "Prashant" }; 

... en tiempo de ejecución será de tipo:

<>f__AnonymousType0<int,string> 

¿Hay alguna manera de especificar un nombre significativo a tales clases?

+17

http://dictionary.reference.com/browse/anonymous – Cerebrus

+5

Realmente no es una pregunta estúpida, estoy con Jon skeet en este caso, necesitamos tipos anónimos con nombre.tomado de http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type – Maslow

+1

No estoy seguro, pero no hay clases anónimas en C#. Hay tipos anónimos, y esto hace una gran diferencia. – Damian

Respuesta

24

¿Es una clase normal con un nombre?

public class Employee 
{ 
    public int ID; 
    public string Name; 
} 


var Employee = new Employee { ID = 5, Name= "Prashant" }; 
122
public class Employee {} 

38

Es un tipo anónimo, que contradice el objetivo. Esos objetos están diseñados para ser temporales. Demonios, las propiedades son incluso de solo lectura.

Lo siento, estoy siendo un tipo inteligente. La respuesta es no, no hay forma de decirle al compilador qué nombre usar para un tipo anónimo.

De hecho, los nombres de los tipos generados por el compilador usan caracteres ilegales en sus nombres para que no pueda haber una colisión de nombre en su aplicación.

36
public class Employee { 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

A continuación, utilice la siguiente sintaxis

var employee = new Employee { ID = 5, Name = "Prashant" }; 
2

creo que, por definición, tipos anónimos no pueden tener un nombre, sólo lo que el compilador le da. Si está buscando información más significativa sobre el tiempo de diseño en Tipos anónimos, entonces está esperando demasiado del compilador.

4

Sí, va a crear un Anónimo Clase, si usted quiere que su clase tenga un nombre, es decir No Anónimo, a continuación, declarar una clase regular o estructura.

4

Como es anónimo, no puede nombrarlo. Si necesita saber el nombre de un tipo, entonces realmente debe crear una clase.

4

No, no hay forma de dar un nombre de tipo significativo a estas clases como las ha declarado. Los tipos anónimos son solo eso, anónimos. No hay forma de "nombrar" explícitamente el tipo en el código sin recurrir a hacks muy feos.

Si realmente necesita darle un nombre al tipo, tendrá que declarar explícitamente y usar un nuevo tipo con las propiedades que necesita.

23

En realidad, si no tiene miedo de ser extremadamente quisquilloso, podría usar TypeBuilder para construir su propio tipo de tiempo de ejecución basado en su tipo anónimo, que le permitirá especificar un nombre para el tipo. Por supuesto, es mucho más fácil simplemente declarar una clase como casi todos los demás en este hilo sugerido, pero la forma de TypeBuilder es mucho más emocionante. ;)

TypeBuilder

8

La respuesta en Java mundo sería un local class (definida en un método), que están ausentes en C#.

+1

Estaba buscando realmente esta funcionalidad exacta cuando encontré este hilo. Solo he trabajado un par de años en Java en lugar de ~ 10 años en .NET. Ser capaz de crear una clase local (desde una interfaz o una clase base) es definitivamente una característica muy útil en Java que falta en .NET. – MikeJansen

Cuestiones relacionadas