Suponga que tiene una clase básica Employee
como tal:La conversión a IEnumerable <T>
class Employee
{
public string Name;
public int Years;
public string Department;
}
Entonces (en una clase separada) que tienen los siguientes fragmentos de código (creo que entiendo todos excepto el último):
Creo que el siguiente fragmento de código funciona porque el iniciador de la matriz crea una matriz de objetos Employee que son del mismo tipo que la variable de la fuerza de trabajo a la que se está asignando.
Employee[] workforceOne = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Tengo el siguiente fragmento de código. Creo que esto funciona porque la matriz de Employee
objetos implicity es una implementación de la clase Array() que implementa IEnumerable
. Por lo tanto, creo que esta es la razón por la matriz se puede asignar a IEnumerable?
IEnumerable workforceTwo = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
entonces tengo este fragmento de código:
IEnumerable<Employee> workforceThree = new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
No estoy seguro de por qué este fragmento de código funciona?IEnumerable<Employee>
hereda de IEnumerable
(? Y sustituciones (o sobrecargas) el método GetEnumerator()
) pero no deben i por lo tanto, es necesaria una conversión de lo anterior para trabajar como tal:
//The cast does work but is not required
IEnumerable<Employee> workforceFour = (IEnumerable<Employee>)new Employee[] {
new Employee() { Name = "David", Years = 0, Department = "software" },
new Employee() { Name = "Dexter", Years = 3, Department = "software" },
new Employee() { Name = "Paul", Years = 4, Department = "software" } };
Parece que la matriz está siendo implícitamente abajo emitir desde un tipo de IEnumerable
a IEnumerable<Employee>
, pero siempre pensé que cuando necesitabas convertir un tipo a algo más específico necesitabas un lanzamiento explícito.
Tal vez me está perdiendo algo simple en mi comprensión aquí, pero alguien puede por favor ayudarme con mi comprensión al respecto.
Gracias.
¿Cuál es la pregunta aquí? – Aliostad
@Aliostad: está justo debajo del fragmento 'workforceThree'. – Heinzi
+1 ¡Gran pregunta! – Gishu