假設你有一個基本的Employee
類這樣:鑄造陣列的IEnumerable <T>
class Employee
{
public string Name;
public int Years;
public string Department;
}
然後(在一個單獨的類)我有下面的代碼片段(我想我明白所有,但最後一個):
我相信下面的代碼片段的工作原理是因爲數組initiliser創建了一個Employee對象的數組,它與被分配給的勞動力變量的類型相同。
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" } };
然後我有下面的代碼片段。我相信這是有效的,因爲Employee
對象隱含數組是實現IEnumerable
的Array()類的實現。因此,我相信這就是爲什麼數組可以分配給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" } };
然後,我有這樣的代碼片段:
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" } };
我不知道爲什麼這個代碼片段的作品?從IEnumerable
IEnumerable<Employee>
繼承(α和覆蓋(或過載)的GetEnumerator()
方法),但不應因此,我需要用於上述的鑄造這樣的工作:
//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" } };
似乎陣列正被隱式地向下從IEnumerable
類型投射到IEnumerable<Employee>
,但我一直認爲,當您需要將類型轉換爲更具體的類型時,您需要進行明確的投射。
也許我在我的理解中錯過了一些簡單的東西,但是有人可以幫我理解這個。
謝謝。
這裏有什麼問題? – Aliostad
@Aliostad:它位於'workforceThree'片段的正下方。 – Heinzi
+1好問題! – Gishu