次の方法で共有


コンパイラ エラー CS1657

更新 : 2007 年 11 月

エラー メッセージ

'reason' であるため、'parameter' を ref または out 引数として渡せません

このエラーは、変数が読み取り専用になるコンテキストで、その変数を ref 引数またはout 引数として渡した場合に発生します。読み取り専用になるコンテキストとしては、foreach の反復子、using の変数、fixed の変数などがあります。このエラーを解決するには、using ブロック、foreach ステートメント、および fixed ステートメントでは、これらの変数 (つまり、foreach、using、fixed で使用される変数) を ref パラメータや out パラメータとして受け取るような関数を呼び出さないようにします。

使用例

次の例では 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
    }
}