Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se zabývá následujícími chybami kompilátoru:
- CS0022: Nesprávný počet indexů uvnitř [], očekávané 'číslo'
-
CS0178: Neplatný specifikátor pořadí: byl očekáváno "
,' nebo ']' - CS0248: Nelze vytvořit pole se zápornou velikostí
-
CS0270: Velikost pole nelze zadat v deklaraci proměnné (zkuste inicializovat výrazem '
new' ). - CS0611: Prvky pole nemohou být typu
- CS0623: Inicializátory polí lze použít pouze v proměnné nebo inicializátoru pole. Zkuste místo toho použít nový výraz.
- CS0650: Chybný deklarátor pole: Chcete-li deklarovat spravované pole, specifikátor pořadí předchází identifikátoru proměnné. Chcete-li deklarovat pole vyrovnávací paměti pevné velikosti, použijte pevné klíčové slovo před typem pole.
- CS0719: Prvky pole nemohou být statického typu
- CS0747: Deklarátor člena inicializátoru je neplatný.
- CS0820: Nelze přiřadit inicializátor pole k implicitně zadanému místnímu prostředí
- CS0826: Pro implicitně napsané pole nebyl nalezen žádný nejlepší typ.
- CS0846: Očekává se inicializátor vnořeného pole
- CS1063: Nejlepší přetížená metoda Add pro prvek kolekčního inicializátoru je zastaralá.
-
CS1552: Specifikátor typu pole,
[]musí být uveden před názvem parametru. - CS1586: Deklarace pole musí obsahovat velikost pole nebo inicializátor pole
- CS1920: Inicializátor elementu nemůže být prázdný.
-
CS1921: Nejlepší přetížená metoda má nesprávný podpis pro element inicializátoru. Inicializovatelná musí být přístupná
Addmetoda instance. - CS1925: Objekt typu type 'type' nelze inicializovat inicializátorem kolekce.
- CS1950: Nejlepší přetížená metoda Add pro inicializátor kolekce má některé neplatné argumenty.
-
CS1954: Nelze použít nejlepší přetíženou metodu odpovídající elementu inicializátoru kolekce. Metody inicializátoru kolekce
Addnesmí mít parametry typurefneboout. - CS9174: Nelze inicializovat typ s literálem kolekce, protože typ není konstruovatelný.
- CS9176: Pro literál kolekce neexistuje žádný cílový typ.
- CS9185: Typ tvůrce CollectionBuilderAttribute musí být ne generickou třídou nebo strukturou.
- CS9186: Název metody CollectionBuilderAttribute je neplatný.
-
CS9187: Nelze najít přístupnou metodu s očekávaným podpisem: statická metoda s jedním parametrem typu
ReadOnlySpan<T>; a správný návratový typ - CS9188: Typ má CollectionBuilderAttribute, ale žádný typ elementu.
- CS9203: Výraz pro kolekci tohoto typu nelze v tomto kontextu použít, protože může být zviditelněn mimo aktuální obor.
- CS9210: Tuto verzi System.Collections.Immutable.ImmutableArray<T>nelze použít s výrazy kolekce.
-
CS9212: Operátor šíření '
..' nemůže pracovat s proměnnými typu 'type', protože 'type' neobsahuje veřejnou instanci nebo definici rozšíření pro 'member'. - CS9213: Cíl výrazu kolekce 'type' nemá žádný typ prvku.
- CS9214: Typ výrazu kolekce musí mít použitelný konstruktor, který lze volat bez argumentů.
- CS9215: Typ výrazu kolekce musí mít instanci nebo rozšiřující metodu Add, kterou lze volat jedním argumentem.
- CS9222: Inicializátor kolekce vede k nekonečnému řetězu instancí kolekce 'typu'.
- CS9332: Operátor spread '.' nelze použít ve výrazu filtru klauzule catch.
- CS9354: Element with(...) musí být prvním prvkem.
- CS9355: Prvky 'with(...)' nejsou podporovány pro typ 'type'.
- Argumenty prvku 'with(...)' nesmí být dynamické.
- CS9357: Element with(...) pro rozhraní jen pro čtení musí být prázdný, pokud je k dispozici.
- CS9358: Typ elementu této kolekce nesmí být ref struktura ani parametr typu povolující ref struktury
- CS9359: Žádné přetížení metody "method" přebírá argumenty elementu number 'with(...)'.
Kromě toho jsou v tomto článku popsána následující upozornění:
- CS1062: Nejlepší přetížená metoda Add pro inicializační prvek kolekce je zastaralá.
- CS1064: Nejvhodnější přetížená metoda Add pro inicializátor elementu kolekce je zastaralá.
- CS3007: Přetížená metoda "method", která se liší pouze nepojmenovanými typy polí, není kompatibilní se specifikací CLS
- CS3016: Pole jako argumenty atributů nejsou v souladu se specifikací CLS
- CS0251: Indexování pole se záporným indexem (indexy matice vždy začínají nulou)
- CS9208: Výraz kolekce může mít neočekávané přidělení haldy. Zvažte explicitní vytvoření pole a následný převod na konečný typ, aby bylo přidělení explicitní.
-
CS9209: Výraz kolekce může způsobit neočekávané alokace na haldě kvůli použití rozprostření '
..'. Zvažte explicitní vytvoření pole a následný převod na konečný typ, aby bylo alokování zjevné. - CS9332: Operátor spread '.' nelze použít ve výrazu filtru klauzule catch.
Neplatný přístup k elementu pole
- CS0022: Nesprávný počet indexů uvnitř [], očekávané 'číslo'
- CS0251: Indexování pole se záporným indexem (indexy matice vždy začínají nulou)
Chcete-li získat přístup k prvkům pole správně, postupujte podle těchto pravidel indexování. Další informace naleznete v tématu Pole.
- Zadejte stejný počet indexů jako deklarované dimenze (CS0022). Jednorozměrné pole potřebuje jeden index; Třírozměrné pole potřebuje tři indexy.
- Pro indexy pole (CS0251) používejte pouze nezáporná celá čísla. Indexy pole vždy začínají nulou.
Neplatný inicializátor kolekce
- CS0747: Deklarátor člena inicializátoru je neplatný.
- CS1920: Inicializátor elementu nemůže být prázdný.
-
CS1921: Nejlepší přetížená metoda má nesprávný podpis pro element inicializátoru. Inicializovatelná musí být přístupná
Addmetoda instance. - CS1922: Nelze inicializovat typ type 'type' s inicializátorem kolekce, protože 'type' neimplementuje 'System.Collections.IEnumerable'.
- CS1925: Objekt typu type 'type' nelze inicializovat inicializátorem kolekce.
- CS1927: Upozornění: Ignorování /win32manifest pro modul, jelikož se vztahuje pouze na sestavení
- CS1950: Nejlepší přetížená metoda Add pro inicializátor kolekce má některé neplatné argumenty.
-
CS1954: Nejlepší přetížená metoda odpovídající elementu inicializátoru kolekce nemůže být použita. Metody inicializátoru kolekce nesmí obsahovat
refnebooutparametry. - CS9174: Nelze inicializovat typ pomocí literálu kolekce, protože typ není konstruovatelný.
- CS9176: Pro literál kolekce neexistuje žádný cílový typ.
- CS9203: Výraz kolekce tohoto typu nelze v tomto kontextu použít, protože může být přístupný mimo aktuální rozsah.
- CS9210: Tuto verzi System.Collections.Immutable.ImmutableArray<T> nelze použít s kolekčními výrazy.
-
CS9212: Operátor šíření '
..' nemůže pracovat s proměnnými typu 'type', protože 'type' neobsahuje veřejnou instanci nebo definici rozšíření pro 'member'. - CS9213: Cíl výrazu kolekce 'type' nemá žádný typ prvku.
- CS9214: Typ výrazu kolekce musí mít použitelný konstruktor, který lze volat bez argumentů.
- CS9215: Typ výrazu kolekce musí mít instanci nebo rozšiřující metodu Add, kterou lze volat jedním argumentem.
- CS9222: Inicializátor kolekce vede k nekonečnému řetězu instancí kolekce typu.
- CS9332: Operátor spread '.' nelze použít ve výrazu filtru klauzule catch.
- CS9354: Element with(...) musí být prvním prvkem.
- CS9355: Prvky 'with(...)' nejsou podporovány pro typ 'type'.
- CS9356: Argumenty elementu with(...) nemohou být dynamické.
- CS9357: Element with(...) pro rozhraní jen pro čtení musí být prázdný, pokud je k dispozici.
- CS9358: Typ elementu této kolekce nemusí být referenční struktura nebo parametr typu umožňující struktury ref
- CS9359: Žádné přetížení metody 'method' neakceptuje 'number' argumentů typu 'with(...)'
Kompilátor může také vygenerovat následující upozornění:
- CS1062: Nejvhodnější přetížená metoda Add pro prvek inicializátoru kolekce je zastaralá.
- CS1063: Nejlepší přetížená metoda Add pro inicializační prvek kolekce je zastaralá.
- CS1064: Nejvhodnější přetížená metoda Add pro prvek inicializátoru kolekce je zastaralá.
- CS9208: Výraz kolekce může mít neočekávané přidělení haldy. Zvažte explicitní vytvoření pole a následný převod na konečný typ, aby bylo přidělení explicitní.
-
CS9209: Výraz kolekce může vyvolat neočekávané přidělení haldy kvůli použití '
..' rozprostření. Zvažte, zda explicitně vytvořit pole a poté je převést na konečný typ, aby bylo přidělení zřejmé.
Chcete-li vytvořit platné inicializátory kolekce, postupujte podle těchto pravidel. Další informace naleznete viz část Výrazy kolekce.
- Nekombinujte inicializaci vlastností s přidáním elementu do stejného inicializátoru (CS0747).
- Do inicializátorů kolekce s složenými závorkami (CS1920) zahrňte aspoň jeden prvek.
- Ujistěte se, že typ kolekce implementuje
IEnumerable(CS1922). - Inicializátory kolekcí používejte pouze u typů kolekcí (CS1925).
- Ověřte, že
Addje metoda přístupná, přebírá jeden parametr odpovídající typu elementu a nepoužívárefanioutmodifikátory (CS1921, CS1954). - Vyřešte nejednoznačné přetížení metod
Add(CS1950). - Zadejte explicitní cílový typ pro výrazy kolekce, když ho kompilátor nemůže odvodit (CS9176, CS9213).
- Ujistěte se, že typ kolekce lze vytvořit konstruktor bez parametrů (CS9174, CS9214).
- Nepoužívejte
ref structtypy ve výrazech kolekce, které mohou narušit bezpečnost ref (CS9203). - Aktualizujte na kompatibilní verzi prostředí pro běh pro
ImmutableArrayvýrazy kolekce (CS9210). - Implementujte vzorce výčtu (například
GetEnumerator) pro podporu operátoru šíření (CS9212). - Vyhněte se cyklovým závislostem v inicializaci kolekce (CS9222).
- Nepoužívejte operátor rozbalování ve výrazech filtru klauzule catch (CS9332).
- Umístěte
with(...)prvek na první pozici ve výrazech kolekce (CS9354). - Používejte
with(...)prvky pouze u typů, které podporují argumenty výrazů kolekce (CS9355). - Nepoužívejte dynamické argumenty v
with(...)prvcích (CS9356). - Pro typy rozhraní jen pro čtení (
with()) použijte prázdné. - Nepoužívejte typy ref struktur jako typy prvků v kolekcích, které je nepodporují (CS9358).
- Porovná počet argumentů s dostupnými
with(...)přetíženími konstruktoru (CS9359).
Neplatné pořadí polí
-
CS0178: Neplatný specifikátor pořadí: byl očekáváno "
,' nebo ']' - CS0650: Chybný deklarátor pole: Chcete-li deklarovat spravované pole, specifikátor pořadí předchází identifikátoru proměnné. Chcete-li deklarovat pole vyrovnávací paměti pevné velikosti, použijte pevné klíčové slovo před typem pole.
-
CS1552: Specifikátor typu pole,
[]musí být uveden před názvem parametru.
Chcete-li deklarovat pole správně, postupujte podle správného pořadí syntaxe. Další informace naleznete v části Pole a specifikace jazyka C# v inicializátorech polí.
Deklarace pole se skládá z těchto tokenů v pořadí:
- Typ prvků pole (například
int,string, neboSomeClassType). - Maticové závorky, volitelně včetně čárek pro více dimenzí.
- Název proměnné.
Při zadávání dimenzí pole můžete použít:
- Počet prvků ve složených závorkách (
{a}) - Prázdné závorky
- Jedna nebo více čárek uzavřených v hranatých závorkách
Následující příklady ukazují platné deklarace pole:
int[] anArrayOfIntegers;
string[,,] threeDimensionalStringArray;
Neplatná délka pole
- CS0248: Nelze vytvořit pole se zápornou velikostí
- CS0270: Velikost pole nelze zadat v deklaraci proměnné (zkuste inicializovat pomocí výrazu new).
- CS1586: Vytvoření pole musí mít velikost pole nebo inicializátor pole
Chcete-li vytvořit pole s platnými délkami, zadejte velikost během inicializace, nikoli deklaraci. Další informace naleznete v tématu Pole.
- Zadejte délku pole jako součást inicializace, nikoli deklaraci (CS0270).
- Pro dimenze pole (CS0248) používejte pouze kladná celá čísla.
- Zadejte velikost ve výrazu
newnebo inicializátoru pole (CS1586).
Následující příklad ukazuje oba mechanismy:
int[] fiveIntegers = new int[5];
string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
Neplatný typ elementu
- CS0611: Prvky pole nemohou být typu 'type'
- CS0719: Prvky pole nemohou být statického typu
- CS0820: Nelze přiřadit inicializátor pole k implicitně zadanému místnímu prostředí
- CS0826: Pro pole s implicitně zadaným typem nebyl nalezen žádný nejlepší typ
Chcete-li použít pole se správnými typy prvků, postupujte podle těchto omezení typů. Další informace najdete v tématu Implicitně zadané místní proměnné a nejlepší společný typ.
- Nepoužívejte omezené typy jako System.TypedReferenceSystem.ArgIterator a jako typy prvků pole (CS0611).
- Nepoužívejte
statictřídy jako typy elementů pole, protože instance nelze vytvořit (CS0719). - Inicializace implicitně zadaných polí pomocí výrazu
new(CS0820). - Ujistěte se, že všechny prvky inicializátoru pole s implicitně zadaným typem mají nejlepší společný typ (CS0826).
Následující příklady ukazují, jak deklarovat implicitně typovaná pole:
var implicitType = new[] { 1, 2, 3 };
char c = 'c';
short s1 = 0;
short s2 = -0;
short s3 = 1;
short s4 = -1;
// common type is "int"
var commonType = new[] { s1, s2, s3, s4, c, 1 };
Pokud chcete zajistit nejlepší běžný typ, použijte některou z těchto technik:
- Dejte poli explicitní typ.
- Udělte všem prvkům pole stejný typ.
- Zadejte explicitní přetypování prvků, které mohou způsobovat problém.
Neplatný inicializátor pole
- CS0623: Inicializátory polí lze použít pouze v inicializátoru proměnné nebo pole. Zkuste místo toho použít nový výraz.
- CS0846: Očekává se inicializátor vnořeného pole
- CS1925: Objekt typu type 'type' nelze inicializovat inicializátorem kolekce.
Tyto chyby označují neplatnou syntaxi inicializátoru pole. Další informace naleznete v tématu Pole.
Vytvoření platných inicializátorů pole:
- Inicializátory pole používejte pouze v deklaraci proměnných nebo polí (CS0623).
newPoužijte výraz v jiných kontextech. - Vyvažte složené závorky (
{a}) kolem prvků nebo podřízených polí (CS0846) - Ujistěte se, že výraz inicializace odpovídá počtu polí v inicializaci zubatého pole.
- Inicializátory kolekcí používejte pouze u typů kolekcí, ne u polí nebo jiných typů (CS1925).
Neplatný tvůrce kolekcí
- CS9175: Strom výrazů nesmí obsahovat kolekční výraz.
- CS9177: Návratový typ metody builderu 'CollectionBuilderAttribute' musí odpovídat typu kolekce použitému v 'betterness'.
- CS9178: Pro přirozený typ "type" neexistuje žádný cílový typ.
- CS9179: Typ výrazu kolekce musí mít použitelný konstruktor, který lze volat bez argumentů.
- CS9180: Metoda Tvůrce CollectionBuilderAttribute musí být statickou metodou.
- CS9181: Typ parametru metody Tvůrce CollectionBuilderAttribute musí odpovídat parametru ReadOnlySpan<{0}>.
- CS9182: Neplatná 'CollectionBuilderAttribute'. Nebyla nalezena žádná odpovídající metoda '{0}' v tvůrci typu '{1}'.
- CS9183: Návratový typ metody CollectionBuilderAttribute musí být ne abstraktní typ bez rozhraní, který lze použít jako "typ".
- CS9185: Statický typ nelze použít jako argument typu.
-
CS9186: Název
CollectionBuilderAttributemetody je neplatný. - CS9187: Nelze najít přístupnou metodu Create s očekávaným podpisem: statickou metodu s jedním parametrem typu ReadOnlySpan<{0}> a návratovým typem .{1}
- CS9188: 'scoped' nelze použít jako modifikátor na parametr typu výrazu kolekce.
- CS9190: Metoda CollectionBuilderAttribute builderMethod je nepoužitelná, protože je obecná.
- CS9192: Řádkové převody polí nelze použít s kolekčními výrazy.
- CS9193: Argument 'argument' nesmí být předán s klíčovým slovem 'ref'.
- CS9194: Argument 'argument' nesmí být předán s klíčovým slovem out
- CS9195: Argument 'argument' nesmí být předán s klíčovým slovem 'in'.
- CS9196: Funkce 'kolekční výraz' není k dispozici v jazyce C# 'version'. Použijte prosím jazykovou verzi 'requiredVersion' nebo vyšší.
- CS9197: Funkce 'inline arrays' není k dispozici ve verzi jazyka C# 'version'. Použijte prosím verzi jazyka 'requiredVersion' nebo vyšší.
- CS9198: Funkce 'ref' a 'unsafe' v asynchronních a iterátorových metodách není dostupná ve verzi jazyka C# 'verze'. Použijte prosím jazykovou verzi 'požadovanáVerze' nebo vyšší.
- CS9199: Výraz kolekce není k dispozici v jazyce C# 'version'. Použijte prosím jazykovou verzi 'requiredVersion' nebo vyšší.
- CS9202: Funkce 'ref readonly parameters' není k dispozici v jazyce C# 'version'. Použijte prosím jazykovou verzi 'requiredVersion' nebo vyšší.
- CS9208: Operátor nameof nelze použít pro přímý přístup k poli.
- CS9209: Jako argument hodnoty nelze použít návratovou vlastnost "vlastnost".
- CS9211: Výraz musí být typu "type", protože je přiřazen odkazem.
- CS9212: Výraz kolekce nelze použít jako hodnotu v pevném příkazu
- CS9217: Proměnná 'ref' nemůže být zachována přes hranici 'await' nebo 'yield'.
- CS9218: "paramName" je odkazová struktura a nemůže být typem parametru.
- CS9221: Typ "type" nemusí být odkazová struktura nebo parametr typu, který umožňuje použití struktury ref jako parametru "parameter" v obecném typu nebo metodě 'member'.
- CS9223: Struktura, která obsahuje pole ref, nelze použít ve výrazu kolekce.
- CS9228: Není povolena deklarace odkazové struktury bez proměnné.
- CS9232: Částečné deklarace metody mají rozdíly v signaturách.
- CS9233: Modifikátor "soubor" lze použít pouze u typů definovaných na nejvyšší úrovni v kompilační jednotce.
Chcete-li vytvořit výrazy kolekce s atributy tvůrce kolekcí správně, postupujte podle těchto požadavků. Další informace naleznete viz část Výrazy kolekce.
- Ujistěte se, že cílový typ má typ iterace, který podporuje
foreach(CS9188). - Nepoužívejte obecné typy jako typy tvůrce kolekcí (CS9185).
- Ověřte platnost názvu metody zadaného v
CollectionBuilderAttributesouboru (CS9186). - Použijte
CollectionBuilderAttributepouze u statických metod, které odpovídají požadovanému podpisu: vrátí typ kolekce a vezmeReadOnlySpan<T>parametr, kterýTodpovídá typu elementu (CS9180, CS9181, CS9182, CS9183, CS9187, CS9190). - Ujistěte se, že návratový typ odpovídá a není abstraktní typ nebo rozhraní (CS9177, CS9183).
- Nepoužívejte struktury ref ani typy s poli ref ve výrazech kolekce (CS9218, CS9221, CS9223, CS9228).
- Vyvarujte se používání kolekčních výrazů ve výrazových stromech (CS9175).
- Pro výrazy kolekcí a související funkce (CS9196, CS9197, CS9198, CS9199, CS9202) použijte správnou jazykovou verzi.
Běžná upozornění specifikace jazyka
- CS3007: Přetížená metoda „method“, která se liší pouze podle nepojmenovaných typů polí, není v souladu s CLS
- CS3016: Použití polí jako argumentů atributů není kompatibilní s normou CLS
Pokud chcete psát kód kompatibilní se specifikací CLS s poli, postupujte podle těchto pokynů. Další informace naleznete v tématu Nezávislost jazyka.
- Nevytvávejte přetížené metody, které se liší pouze v typech prvků pole (CS3007).
- Nepoužívejte pole jako argumenty atributů (CS3016).
CS3007 nastane, pokud máte přetíženou metodu, která přebírá klikaté pole a jediný rozdíl mezi signaturami metod je typ prvku pole. Chcete-li se této chybě vyhnout, zvažte použití obdélníkového pole místo zahlceného pole nebo pokud není potřeba dodržování předpisů CLS, odeberte CLSCompliantAttribute atribut. Další informace o dodržování předpisů CLS naleznete v tématu Jazyková nezávislost a komponenty nezávislé na jazyce.
CS3016 označuje, že nevyhovuje specifikaci CLS (Common Language Specification) k předání pole atributu. Další informace o dodržování předpisů CLS najdete v tématu Nezávislost jazyka a komponenty nezávislé na jazyce.