Kompilatorfel CS8177
Asynkrona metoder kan inte ha lokala efterreferenser
För att hantera asynkront tillstånd async
använder metoderna en tillståndsdator och samlar in variabeltillstånd i stängningar som implementerats i kompilatorgenererade klasser och egenskaper. En lokal variabelreferens (på stacken) kan inte samlas in i instansen av en klass i heapen, så kompilatorn utfärdar ett fel.
Följande exempel genererar CS8177 före 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);
}
}
}
ref
Ta bort modifieraren. Eller så kan du uppgradera till C# 13, som levereras med .NET 9.
class C
{
public async static Task Test()
{
await Task.CompletedTask;
foreach (int x in new E())
{
System.Console.Write(x);
}
}
}
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: