英語で読む

次の方法で共有


コンパイラ エラー CS8422

静的なローカル関数に 'this' または 'base' への参照を含めることはできません。

ローカル関数に static キーワードを指定すると、ローカル関数は親インスタンス メソッドまたはインスタンス フィールドの状態にアクセスできなくなります。
このエラーは、包含型のインスタンス メンバーにローカル関数がアクセスしていることを示します。

次の例では CS8422 が生成されます。

C#
public class C
{
    private int counter = 1;
    public void IncreaseCounter()
    {
        static void localFunc(int addition)
        {
            this.counter += addition;   // CS8422 due to reference to 'this'
            base.ToString();            // CS8422 due to reference to 'base'

            // Also for implicit 'this' or 'base' references:
            counter += addition;   // CS8422 due to implicit reference to 'this'
            ToString();            // CS8422 due to implicit reference to 'base'
        }
        localFunc(10);
        Console.WriteLine(this.counter);
    }
}

このエラーを解決するには

親の状態を取り込んで変更するというローカル関数の意図がある場合は、静的と宣言しないでください。 インスタンス メンバーへのアクセス権を削除することもできます。

C#
public class C
{
    private int counter = 1;
    public void IncreaseCounter()
    {
        void localFunc(int addition)
        {
            counter += addition;
            ToString();
        }
        localFunc(10);
        Console.WriteLine(this.counter);
    }
}

public class Program
{
    public void Main()
    {
        C c = new();
        c.IncreaseCounter();
    }
}

// Output:
// 11

関連項目