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);
}
}
}