我是C#的初學者程序員,我剛剛開始使用IEnumerable的練習。爲什麼你可以使用IEnumerable作爲方法的返回類型或者在構造函數中
我想我明白的代碼,但我掙扎理解爲什麼你會不會使用這種方式
例1
考慮以下隔離代碼.....
private List<Card> cards;
public Deck (IEnumerable<Card> initialCards)
{
cards = new List<Card>(initialCards);
}
創建甲板對象並調用這個構造函數的代碼是...
Card[] cardArray = new Card[numberOfCards];
for (int i = 0; i < numberOfCards; i++)
{
cardArray[i] = new Card((Suits)random.Next(0, 4), (Values)random.Next(0, 12));
}
deck1 = new Deck(cardArray);
如果有人先不介意確認低於我的理解......
- 我們創造型卡的數組,並用卡
- 我們通過卡[]數組中的甲板構造填充當創建一個Deck對象時。即使構造函數參數包含一個IEnumerable類型的參數,但它被認爲是有效的,因爲數組實現了IEnumerable。 這裏發生了演員嗎?
- 列表卡片被傳遞給重載列表構造函數的IEnumerable參數初始化。 再一次,這是一個演員或某種轉換?
使用IEnumerable作爲中間類型似乎完全沒有意義。該代碼仍然有效相同,包括foreach循環如果我改變構造到最終使用...
public Deck (Card [] initialCards)
{
cards = new List<Card>(initialCards);
}
例2
public IEnumerable<string> GetCardNames()
{
string[] stringArray = new string[cards.Count];
for (int i = 0; i < stringArray.Length; i++)
{
stringArray[i] = cards[i].ToString();
}
return stringArray;
}
這是來自同一個類中的方法。再次,我不確定爲什麼這是作爲一個IEnumerable返回,當我們仍然可以做一個字符串數組的foreach。
例3
public IEnumerable<IWebElement> ElementCollection { get; set; }
這是非常noobish,但有人可以給我解釋一下這是什麼意思嗎?它是IEnumerable類型的公共屬性嗎?當你使用一個接口作爲屬性類型時,它與其他類型有何不同?例如字符串
這與LINQ稍後在代碼中一起使用,這在我的學習中還沒有得到。可能這個例子表明,如果我們只想遍歷某些東西,IEnumerable可以被使用嗎?
非常感謝,
可枚舉是某些序列操作的泛化 - 這些操作包括由數組提供的子集。所有數組(或列表)*實現* IEnumerable。 – user2864740