静的なローカル関数に '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
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。