Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Fel och varningar relaterade till instruktions
Det finns många fel relaterade till instruktions yield return
- och iteratormetoderna:
- CS1622: Det går inte att returnera ett värde från en iterator. Använd avkastningsreturutdraget för att returnera ett värde eller en avkastningsbrytning för att avsluta iterationen.
- CS1624: Brödtexten för "accessor" kan inte vara ett iteratorblock eftersom "typ" inte är en iteratorgränssnittstyp
- CS1625: Kan inte ge resultat i brödtexten i en slutsats
- CS1626: Det går inte att ge ett värde i brödtexten i ett försöksblock med en catch-sats
- CS1627: Uttryck som förväntas efter avkastningsretur
- CS1629: Osäker kod kanske inte visas i iteratorer
- CS1631: Det går inte att ge ett värde i brödtexten i en catch-sats
- CS1637: Iteratorer kan inte ha osäkra parametrar eller avkastningstyper
- CS4013: Instans av typen kan inte användas i en kapslad funktion, frågeuttryck, iteratorblock eller asynkron metod
- CS8154: Brödtexten kan inte vara ett iteratorblock eftersom den returneras med referens
- CS8176: Iteratorer kan inte ha lokala efterreferenser
- CS9238: Det går inte att använda "avkastningsretur" i ett "osäkert" block
-
CS9239: Operatorn
&
kan inte användas på parametrar eller lokala variabler i iteratormetoder.
En iteratormetod måste följa flera regler i C#. Kompilatorn utfärdar följande fel när iteratormetoden bryter mot en eller flera av dessa regler:
- CS1622: Det går inte att returnera ett värde från en iterator. Använd avkastningsreturutdraget för att returnera ett värde eller en avkastningsbrytning för att avsluta iterationen.
- CS1624: Brödtexten för "accessor" kan inte vara ett iteratorblock eftersom "typ" inte är en iteratorgränssnittstyp
- CS1627: Uttryck som förväntas efter avkastningsretur
- CS1637: Iteratorer kan inte ha osäkra parametrar eller avkastningstyper
- CS8154: Brödtexten kan inte vara ett iteratorblock eftersom den returneras med referens
Iteratormetoden måste följa följande regler:
- En iteratormetod (med och
yield return
eventuelltyield break
) kan inte också använda enreturn
-instruktion för att returnera en sekvens. - En iteratormetod måste deklarera en iteratorgränssnittstyp som returtyp. Iteratorgränssnittstyperna är: IEnumerable, IEnumerable<T>, IEnumerator, IEnumerator<T>.
- En
yield return
instruktion måste innehålla ett uttryck som ska returneras som en del av en sekvens.yield return;
är inte giltig. - En iteratormetod kan inte använda osäkra typer som parametrar, till exempel pekare.
- En iteratormetod kan inte
yield return
vara osäker, till exempel pekare. - En iteratormetod kan inte
yield return
medref
. Du måste returnera med värde.
En iteratormetods brödtext måste överensstämma med begränsningarna för -instruktionen yield return
och dess kontext. Kompilatorn utfärdar följande fel när iteratorn bryter mot någon av dessa begränsningar:
- CS1625: Kan inte ge resultat i brödtexten i en slutsats
- CS1626: Det går inte att ge ett värde i brödtexten i ett försöksblock med en catch-sats
- CS1631: Det går inte att ge ett värde i brödtexten i en catch-sats
- CS1629: Osäker kod kanske inte visas i iteratorer
- CS9238: Det går inte att använda "avkastningsretur" i ett "osäkert" block
-
CS9239: Operatorn
&
kan inte användas på parametrar eller lokala variabler i iteratormetoder.
Dessa fel indikerar att koden bryter mot säkerhetsreglerna eftersom en iterator returnerar ett element och återupptas för att generera nästa element:
- Du kan inte
yield return
från encatch
eller-satsfinally
. - Du kan inte
yield return
från etttry
block med en catch-sats. - Du kan inte
yield return
från ettunsafe
block. Kontexten för en iterator skapar ett kapslatsafe
block i det omslutandeunsafe
blocket. - Du kan inte använda operatorn
&
för att ta adressen till en variabel i en iteratormetod.
Före C# 13 kan iteratorer inte innehålla unsafe
kod (CS1629). Från och med C# 13 är den här begränsningen avslappnad. Alla yield return
instruktioner måste vara i en säker kontext, men en iteratormetod kan innehålla unsafe
kod.
Iteratormetoder har särskilda referenssäkerhetsbegränsningar. Dessa regler är avslappnade i C# 13:
- CS4013: Instans av typen kan inte användas i en kapslad funktion, frågeuttryck, iteratorblock eller asynkron metod
- CS8176: Iteratorer kan inte ha lokala efterreferenser
Före C# 13 kunde iteratorer inte deklarera ref
lokala variabler. De kunde inte deklarera några variabler av en ref struct
typ.
Från och med C# 13 ref struct
kan typer användas i iteratormetoder, om de inte används i hela yield return
instruktionen. Från och med C# 13 kan iteratormetoder deklarera ref
lokala variabler.
Feedback om .NET
.NET är ett öppen källkod projekt. Välj en länk för att ge feedback: