我发现这个例子以相反的顺序返回自定义类型的Car对象。 有人可以解释我这段代码。感谢
public IEnumerable GetTheCars(bool returnReversed)
{
if(returnReversed)
{
for(int i=cars.Length; i!=0; i--)
{
yield return cars[i-1]; //this line makes me confused
}
}
else {...}
}
答案 0 :(得分:3)
您在评论中表示您需要解释反向排序的工作原理。
for(int i=cars.Length; i!=0; i--)
{
yield return cars[i-1]; //this line makes me confused
}
假设您的列表中有4辆车。
您的for
循环以cars.Length
的值开始,其值为4.对于每次迭代,它递减1.它将在满足i!=0
条件时继续执行此操作。因此,循环将使用以下i
值迭代:4,3,2,1。
如果i
用作阵列/列表的元素索引,那么您将收到汽车[4],汽车[3],汽车[2],汽车[1](逆序!)。但是因为C#中的数组从0(而不是1)开始,所以在访问元素时需要减去1:cars[i-1]
。
答案 1 :(得分:2)
首先使用yield
语句:当使用yield
时,您将返回一个集合,但不是定义集合,而是将所有项放入其中然后返回它,您将返回它,这意味着你的代码当时返回1个项目,运行时将跟踪你的所有产量回报,从中产生一个集合并让方法返回。
例如:
public IEnumable GetInts
{
get
{
yield return 1;
yield return 2;
yield return 3;
yield return 4;
}
}
和
public IEnumable GetInts
{
get
{
var arr = new int[]{1,2,3,4};
return arr;
}
}
这两个代码也是如此。但是当在循环中工作时,有时候使用yield比使用自己跟踪你的收藏更方便。