Поделиться через


Ошибка компилятора CS1649

Обновлен: Ноябрь 2007

Сообщение об ошибке

Члены поля только для чтения "идентификатор" не могут быть переданы ref или out (кроме как в конструкторе)
Members of readonly field 'identifier' cannot be passed ref or out (except in a constructor)

Эта ошибка возникает, если подставить переменную в функцию, которая является членом поля readonly, в качестве аргумента ref или out. Так как параметры ref и out могут быть изменяться функцией, это не допускается. Для устранения этой ошибки удалите ключевое слово readonly в поле или не передавайте члены поля readonly функции. Например, можно попытаться создать временную переменную, которая может быть изменена, и передать ее в качестве аргумента ref, как показано в следующем примере.

Пример

Следующий пример приводит к возникновению ошибки CS1649:

// CS1649.cs
public struct Inner
    {
        public int i;
    }

class Outer
{
    public readonly Inner inner = new Inner();
}

class D
{
    static void f(ref int iref)
    {
    }

    static void Main()
    {
        Outer outer = new Outer(); 
        f(ref outer.inner.i);  // CS1649
        // Try this code instead:
        // int tmp = outer.inner.i;
        // f(ref tmp);
    }
}