Angenommen, Sie haben eine Grundklasse Employee
als solche:
class Employee
{
public string Name;
public int Years;
public string Department;
}
Dann habe ich (in einer separaten Klasse) die folgenden Codefragmente (ich glaube, ich verstehe alle bis auf die letzten):
Ich glaube, dass das folgende Codefragment funktioniert, weil der Array-Initilierer ein Array von Employee-Objekten erstellt, die vom selben Typ sind wie die Workforce-Variable, der zugewiesen wird.
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" } };
Ich habe dann das folgende Codefragment. Ich glaube, dass dies funktioniert, weil die Array- Employee
Objektimplizität eine Implementierung der Array () -Klasse ist, die implementiert wird IEnumerable
. Daher glaube ich, dass das Array aus diesem Grund IEnumerable zugewiesen werden kann.
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" } };
Dann habe ich dieses Codefragment:
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" } };
Ich bin nicht sicher, warum dieses Codefragment funktioniert? IEnumerable<Employee>
erbt von IEnumerable
der GetEnumerator()
Methode (und überschreibt sie (oder überschreibt sie?) ), aber sollte ich deshalb keine Besetzung benötigen, damit die oben genannten als solche funktionieren:
//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" } };
Es scheint, dass das Array implizit von einem Typ IEnumerable
auf " down" übertragen wird , IEnumerable<Employee>
aber ich dachte immer, wenn Sie einen Typ in etwas Spezifischeres konvertieren müssen, benötigen Sie einen expliziten Cast.
Vielleicht fehlt mir hier etwas Einfaches in meinem Verständnis, aber kann mir bitte jemand bei meinem Verständnis helfen?
Vielen Dank.
workforceThree
Fragment.