Delen via


Compilerfout CS8177

Async-methoden kunnen geen lokale bevolking ter referentie hebben

Voor het beheren van asynchrone status async gebruiken methoden een statusmachine, waarbij de variabele status wordt vastgelegd in sluitingen die zijn geïmplementeerd in door compiler gegenereerde klassen en eigenschappen. Een lokale variabelereferentie (op de stack) kan niet worden vastgelegd in het exemplaar van een klasse in de heap, zodat de compiler een fout optreedt.

Opmerking

In het volgende voorbeeld wordt CS8177 gegenereerd vóór C# 13:

// CS8177.cs (20,26)

using System.Threading.Tasks;

class E
{
    public class Enumerator
    {
        public ref int Current => throw new System.NotImplementedException();
        public bool MoveNext() => throw new System.NotImplementedException();
    }

    public Enumerator GetEnumerator() => new Enumerator();
}

class C
{
    public async static Task Test()
    {
        await Task.CompletedTask;

        foreach (ref int x in new E())
        {
            System.Console.Write(x);
        }
    }
}

Deze fout corrigeren

Verwijder de ref wijzigingsfunctie. U kunt ook upgraden naar C# 13, die wordt geleverd met .NET 9.

class C
{
    public async static Task Test()
    {
        await Task.CompletedTask;

        foreach (int x in new E())
        {
            System.Console.Write(x);
        }
    }
}