Supposons que vous ayez une base Employee
comme tel :
class Employee
{
public string Name;
public int Years;
public string Department;
}
Ensuite (dans une classe séparée) j'ai les fragments de code suivants (je pense que je comprends tout sauf le dernier) :
Je pense que le fragment de code suivant fonctionne parce que l'initialisateur de tableau crée un tableau d'objets employés qui sont du même type que la variable workforce à laquelle il est affecté.
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" } };
J'ai alors le fragment de code suivant. Je pense que cela fonctionne parce que le tableau de Employee
L'implicite des objets est une implémentation de la classe Array() qui implémente IEnumerable
. Par conséquent, je crois que c'est la raison pour laquelle le tableau peut être assigné à 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" } };
Ensuite, j'ai ce fragment de code :
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" } };
Je ne suis pas sûr de savoir pourquoi ce fragment de code fonctionne ? IEnumerable<Employee>
hérite de IEnumerable
(et surcharge (ou surcharge ?) la fonction GetEnumerator()
) mais ne devrais-je pas avoir besoin d'un casting pour que la méthode ci-dessus fonctionne comme telle ?
//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" } };
Il semble que le tableau soit implicitement coulé vers le bas à partir d'un type de IEnumerable
a IEnumerable<Employee>
mais j'ai toujours pensé que lorsqu'on avait besoin de convertir un type en quelque chose de plus spécifique, il fallait un cast explicite.
Peut-être que je manque quelque chose de simple dans ma compréhension, mais quelqu'un peut-il m'aider à comprendre ce qui se passe ?
Gracias.
3 votes
@Aliostad : C'est juste en dessous du
workforceThree
fragment.