Řešení chyb a upozornění ve výrazech přidělování polí, kolekcí a zásobníků

Tento článek se zabývá následujícími chybami a upozorněními 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í
  • CS0251: Indexování pole se záporným indexem (indexy matice vždy začínají nulou)
  • 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
  • CS1062: Nejlepší přetížená metoda Add pro inicializační prvek kolekce je zastaralá.
  • CS1063: Nejlepší přetížená metoda Add pro prvek kolekčního inicializátoru je zastaralá.
  • CS1064: Nejvhodnější přetížená metoda Add pro inicializátor elementu kolekce 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á Add metoda instance.
  • CS1922: Nelze inicializovat typ 'type' pomocí inicializátoru kolekce, protože neimplementuje 'System.Collections.IEnumerable'
  • 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 Add nesmí mít parametry typu ref nebo out.
  • 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
  • CS8346: Převod výrazu stackalloc typu "typ elementu" na typ "cílový typ" není možný.
  • CS8353: Výsledek výrazu stackalloc typu span nelze v tomto kontextu použít, protože může být vystaven mimo metodu obsahující
  • CS8381: "Neplatný specifikátor pořadí: očekávaný ']'
  • 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 method-name s očekávaným podpisem: statická metoda, jejíž poslední parametr je typu elementu ReadOnlySpan<T> a vrací typ collection-type.
  • CS9188: Collection-type 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.
  • CS9208: Výraz kolekce typu collection-type může způsobit neočekávané alokace v haldě. Zvažte explicitní vytvoření pole a jeho následný převod na collection-type, aby byla alokace explicitní.
  • CS9209: Výraz kolekce typu 'collection-type' může vést k neočekávaným alokacím na haldě kvůli použití spreadů '..'. Zvažte explicitní vytvoření pole a jeho následný převod na 'collection-type', aby byla alokace explicitní.
  • 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.
  • CS9221: Typ 'type' nesmí být ref struct ani parametr typu umožňující ref structy, aby jej bylo možné použít jako parametr 'parameter' v generickém typu nebo metodě 'member'
  • 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' nepřijímá počet argumentů prvků 'with(...)'

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ý.
  • 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á.
  • 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á Add metoda instance.
  • CS1922: Nelze inicializovat typ 'type' pomocí inicializátoru kolekce, protože neimplementuje 'System.Collections.IEnumerable'
  • CS1950: Nejlepší přetížená metoda Add pro inicializátor kolekce má některé neplatné argumenty.
  • CS1954: out
  • 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.
  • CS9208: Výraz kolekce typu 'collection-type' může vést k neočekávaným alokacím na haldě. Zvažte explicitní vytvoření pole a jeho následný převod na 'collection-type', aby byla alokace explicitní.
  • CS9209: Výraz kolekce typu 'collection-type' může způsobit neočekávané alokace na haldě kvůli použití operátorů '..' spread. Zvažte explicitní vytvoření pole a jeho následný převod na typ 'collection-type', aby byla alokace explicitní.
  • 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.

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.
  • Pokud typ představuje kolekci, ujistěte se, že implementuje IEnumerable (CS1922).
  • Pokud typ nepředstavuje kolekci, použijte místo inicializátoru kolekce inicializátor objektu (CS1922).
  • Pokud nemůžete upravit typ kolekce, který neimplementuje IEnumerable, inicializovat jeho prvky pomocí konstruktorů nebo jiných metod (CS1922).
  • Inicializátory kolekcí používejte pouze u typů kolekcí (CS1925).
  • Ověřte, že Add je metoda přístupná, přebírá jeden parametr odpovídající typu elementu a nepoužívá ref ani out modifiká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 struct typy ve výrazech kolekce, které mohou narušit bezpečnost ref (CS9203).
  • Aktualizujte na kompatibilní verzi prostředí pro běh pro ImmutableArray vý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).

Následující příklad vytvoří CS1922, protože TestClass neimplementuje IEnumerable. Inicializátor objektu místo pokusu o přidání elementů kolekce přiřazuje vlastnosti:

public class Test
{
    public static void Main()
    {
        var invalid = new TestClass { 1, "hello" }; // CS1922
        var valid = new TestClass { MemberA = 1, MemberB = "hello" };
    }
}

public class TestClass
{
    public int MemberA { get; set; }
    public string MemberB { get; set; } = "";
}

Neplatný typ elementu výrazu kolekce

  • CS9358: Typ elementu této kolekce nemusí být referenční struktura nebo parametr typu umožňující struktury ref

Cílová kolekce nepodporuje typ prvku ref struct ani parametr typu, který umožňuje typy podobné ref. Použijte typ prvku, který není typu ref-like. Pro generický kód použijte parametr typu, který neumožňuje typy podobné ref.

Neplatné argumenty výrazu kolekce

  • 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.
  • CS9359: Žádné přetížení metody 'method' nepřijímá počet argumentů prvku 'with(...)'

Podporované cíle a syntaxe najdete v tématu Argumenty výrazů kolekce.

  • CS9354: Prvek with(...) se řídí jiným prvkem kolekce nebo výraz obsahuje více než jeden with(...) prvek. Přesuňte jeden with(...) prvek na první pozici.
  • CS9355: Cílový typ nepodporuje argumenty výrazů kolekce, stejně jako u polí a typů rozsahů. Odeberte prvek with(...), nebo změňte cíl na typ, který podporuje argumenty výrazů kolekcí.
  • CS9356: Argument v elementu with(...) má v době kompilace typ dynamic. Přetypujte nebo převeďte každý dynamický argument na požadovaný nedynamický typ.
  • CS9357: Cíl rozhraní jen pro čtení podporuje pouze prázdný with() prvek. Odeberte argumenty, odeberte with() prvek nebo použijte cílový typ, který tyto argumenty přijímá.
  • CS9359: Žádný přístupný konstruktor, metoda tvůrce kolekce nebo podporovaný podpis rozhraní přijímá zadaný počet argumentů with(...) . Porovná argumenty s platným konstruktorem nebo podpisem rozhraní. Pro tvůrce kolekcí je spárujte s parametry před konečným ReadOnlySpan<T> parametrem nebo přidejte odpovídající přetížení.

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í:

  1. Typ prvků pole (například int, string, nebo SomeClassType).
  2. Maticové závorky, volitelně včetně čárek pro více dimenzí.
  3. 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 new nebo 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" };

Chyby přidělení zásobníku

Tyto chyby označují neplatný cílový převod, životnost nebo syntaxi pořadí a velikosti výrazu stackalloc .

Neplatný převod cíle přidělení zásobníku

  • CS8346: Převod výrazu stackalloc typu "typ elementu" na typ "cílový typ" není možný.

Výraz stackalloc obsahuje předdefinované převody na kompatibilní Span<T> nebo ReadOnlySpan<T>. Jeho integrovaný převod ukazatelů je k dispozici tehdy, když výraz přímo inicializuje místní proměnnou, jejíž typem je ukazatelový typ nebo var. Pozdější přiřazení ukazatele nebo přetypování ukazatele kolem výrazu vytvoří CS8346. Tato omezení se vztahují na předdefinované konverze; použitelná uživatelsky definovaná konverze z ukazatelového typu může způsobit, že bude platný i jiný cílový typ. K diagnostice dochází také v případě, že typ elementu span není kompatibilní, cíl je skalární nebo jiný nepovolný typ nebo výraz se používá v nelokálním kontextu.

Následující příklady generují CS8346:

unsafe class Example
{
    private static int* field = stackalloc int[3];

    public static void Main()
    {
        Span<int> wrongElementType = stackalloc short[3];
        double scalar = stackalloc int[3];
        Span<int> explicitCast = (Span<int>)stackalloc short[3];
        Span<int> pointerCastToSpan = (int*)stackalloc int[3];
        int* pointerCastToPointer = (int*)stackalloc int[3];
        var pointerCastWithVar = (int*)stackalloc int[3];
    }
}

Vyberte kompatibilní Span<T>, ReadOnlySpan<T> nebo cíl ukazatele. Je povoleno kompatibilní přetypování rozpětí; odeberte nebo změňte pouze přetypování, jejichž cíl není kompatibilní s typem elementu přidělení zásobníku. Pokud je výsledkem ukazatel, umístěte výraz stackalloc přímo do inicializátoru deklarace lokální proměnné. Ponechte alokaci jako lokální, místo abyste ji použili v poli, ve vlastnosti nebo v jiném neplatném nelokálním kontextu. Ve stabilním jazyce C# deklarace ukazatele vyžaduje nebezpečný kontext. V jazyce C# 15 Preview lze převod ukazatele povolit mimo nebezpečný kontext; aktuální pokyny k verzi Preview najdete v aktualizovaném modelu bezpečnosti paměti . Operace, které přistupují k paměti přes ukazatel, zůstávají nebezpečné.

unsafe class Example
{
    public static void Main()
    {
        Span<int> stackSpan = stackalloc int[3];
        short* stackPointer = stackalloc short[3];
        var inferredPointer = stackalloc int[3];
    }
}

Použitelný uživatelsky definovaný převod z ukazatelového tvaru představuje samostatnou cestu převodu odlišnou od vestavěných převodů ukazatelů. Následující příklad se zkompiluje v jazyce C# 14 s povoleným nebezpečným kódem:

unsafe struct Example
{
    public static implicit operator Example(int* value) => new();
}

unsafe class Program
{
    public static void Main()
    {
        Example value = stackalloc int[3];
    }
}

Omezení unikání a životnosti

  • CS8353: Výsledek výrazu stackalloc typu span nelze v tomto kontextu použít, protože může být vystaven mimo metodu obsahující

Paměť alokovaná v zásobníku je platná pouze po dobu běhu metody, která ji obsahuje. Ponechte výsledný ukazatel nebo rozsah v rámci této metody. Neukládejte jej do atributu, nevracejte jej ani jej nepoužívejte v jiném kontextu, kde by mohl mít delší životnost než tato metoda.

Další informace o oblastech escape a souvisejících diagnostických informacích naleznete v tématu Chyby a upozornění související s bezpečností odkazů ref.

Neplatná syntaxe pořadí nebo velikosti

  • CS8381: "Neplatný specifikátor pořadí: očekávaný ']'

Výraz stackalloc přidělí jednorozměrný blok paměti. Když vynecháte typ prvku, použijte prázdné závorky následované inicializátorem, například stackalloc[] { 1, 2, 3 }. Chcete-li zadat velikost, umístěte typ prvku před velikost, například stackalloc int[3]. Před uzavíracím tagem ] odeberte čárky, nadbytečné specifikátory pořadí a další neplatné tokeny.

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 static třídy jako typy prvků pole, protože nemůžete vytvářet instance (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). new Použ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í

  • CS9185: Typ tvůrce CollectionBuilderAttribute musí být ne generickou třídou nebo strukturou.
  • CS9186: Název CollectionBuilderAttribute metody je neplatný.
  • CS9187: Nelze najít přístupnou metodu method-name s očekávaným podpisem: statická metoda, jejíž poslední parametr je typu elementu ReadOnlySpan<T> a vrací typ collection-type.
  • CS9188: Collection-type má CollectionBuilderAttribute, ale žádný typ elementu.
  • 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'.

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 CollectionBuilderAttribute souboru (CS9186).
  • Použijte CollectionBuilderAttribute pouze u metod, které odpovídají požadovanému podpisu: vrátí typ kolekce a vezme konečný ReadOnlySpan<T> parametr, kde T odpovídá typu elementu (CS9187).
  • Použijte vhodný typ elementu pro parametr ReadOnlySpan<T> builderu. Nemůže to být ani ref struct, ani parametr typu, který umožňuje ref struct (CS9221).

Upozornění na Specifikaci společného 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 lichocené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 Nezávislost jazyka a komponenty nezávislé na jazyce.

CS3016 označuje, že předání pole atributu není v souladu se specifikací CLS (Common Language Specification). Další informace o dodržování předpisů CLS naleznete v tématu Nezávislost jazyka a komponenty nezávislé na jazyce.