Ошибка компилятора CS1657
Обновлен: Ноябрь 2007
Сообщение об ошибке
Невозможно передать "параметр" в качестве аргумента ref или out, поскольку "причина"
Cannot pass 'parameter' as a ref or out argument because 'reason''
Эта ошибка происходит при передаче аргумента ref или out в контексте, когда переменная доступна только для чтения. В контекстах только для чтения содержатся переменные итерации foreach, переменные using и переменные fixed. Чтобы разрешить эту ошибку, не вызывайте функции, принимающие переменную foreach, using или fixed в качестве параметра ref или out в блоках using, операторах foreach и fixed.
Пример
Следующий пример приводит к возникновению ошибки CS1657:
// CS1657.cs
using System;
class C : IDisposable
{
public int i;
public void Dispose() {}
}
class CMain
{
static void f(ref C c)
{
}
static void Main()
{
using (C c = new C())
{
f(ref c); // CS1657
}
}
}
Следующий код иллюстрирует ту же проблему в операторе fixed:
// CS1657b.cs
// compile with: /unsafe
unsafe class C
{
static void F(ref int* p)
{
}
static void Main()
{
int[] a = new int[5];
fixed(int* p = a) F(ref p); // CS1657
}
}