【发布时间】:2016-04-30 23:13:05
【问题描述】:
我是 C# 的初级程序员,我一直在做一个使用 IEnumerable 的练习。
我想我理解代码,但我很难理解为什么你会以这种方式使用它
示例 1
考虑以下孤立的代码.....
private List<Card> cards;
public Deck (IEnumerable<Card> initialCards)
{
cards = new List<Card>(initialCards);
}
创建一个deck对象并调用这个构造函数的代码是……
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);
如果有人不介意在下面确认我的理解......
- 我们创建一个 Card 类型的数组并用 Cards 填充它
- 在创建 Deck 对象时,我们将 Card [] 数组传递给 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;
}
这是来自同一类的方法。同样,当我们仍然可以对字符串数组执行 foreach 时,我不确定为什么它会作为 IEnumerable 返回。
示例 3
public IEnumerable<IWebElement> ElementCollection { get; set; }
这很愚蠢,但有人可以向我解释这是在说什么吗?它是 IEnumerable 类型的公共属性吗?当您将接口用作属性类型时,它与其他类型有何不同?例如字符串
这在后面的代码中与 LINQ 一起使用,我在学习中还没有用到。这个例子是否表明如果我们只想迭代某些东西,可以使用 IEnumerable?
非常感谢,
【问题讨论】:
-
可枚举是对某些序列操作的概括——这些操作包括数组提供的操作的子集。所有数组(或列表)实现 IEnumerable.
标签: c# interface ienumerable