我是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