我收到错误,我不知道原因:
static void decoupeTableau(IEnumerable<int> dst, IEnumerable<int> src)
{
for (int i = 0; i < src.Count() && i < 4; ++i)
dst.ElementAt(i) = src.ElementAt(i); // Here
}
错误:
作业的左侧必须是变量,属性或索引器
为什么我得到它?
答案 0 :(得分:2)
为什么我得到它?
因为你有一个赋值运算符,左边是方法调用。你有什么期望呢?那叫什么代码?分配必须设置变量的值,或者为属性调用setter。这不是做其中任何一件事。
基本上,你不能这样做 - 对于IEnumerable<T>
它甚至没有意义,因为它可以是只读的,生成的等等。
也许您想要IList<int>
代替:
static void DecoupeTableau(IList<int> dst, IEnumerable<int> src)
{
int i = 0;
foreach (var value in src.Take(4))
{
dst[i] = value;
i++;
}
}
请注意,此代码也可能 更高效 - 在循环中调用Count()
和ElementAt
可能非常昂贵。 (例如,对于生成器,每次调用Count()
时都必须迭代整个流 - 所以如果这是理论上无限的流,它甚至都不会完成,例如随机的整数序列。)
答案 1 :(得分:0)
IEnumerable的一点是你可以通过项目循环,但不能更改列表。如果您需要实际更改列表,则需要IList或数组或类似名称。
你得到的错误是因为ElemetAt是一个函数,而不是元素本身。
使用for循环遍历IEnumerable也是一个特别糟糕的主意,你需要一个foreach循环。