Sdílet prostřednictvím


Vyřešte chyby a upozornění u deklarací operátorů a přetečení

Tento článek se zabývá následujícími chybami a upozorněními kompilátoru:

  • CS0031: Konstantní hodnota "value" nelze převést na typ.
  • CS0056: Nekonzistentní přístupnost: návratový typ "typ" je méně přístupný než operátor 'operator'
  • CS0057: Nekonzistentní přístupnost: typ parametru 'type' je méně přístupný než operátor 'operator'
  • CS0215: Návratový typ operátoru Pravda nebo Nepravda musí být bool
  • CS0216: Operátor "operator" vyžaduje, aby byl definován také odpovídající operátor "missing_operator".
  • CS0217: Aby bylo možné použít jako operátor krátkého okruhu, musí mít uživatelem definovaný logický operátor ("operátor") stejný návratový typ jako typ jeho 2 parametrů.
  • CS0218: Typ ('type') musí obsahovat deklarace operátoru true a operátor false
  • CS0220: Operace přeteče při kompilaci v kontrolovaném módu
  • CS0221: Konstantní hodnota "value" nelze převést na typ (k přepsání použijte syntaxi nezaškrtnutou).
  • CS0448: Návratový typ pro ++ nebo -- operátor musí být obsahující typ nebo odvozený z tohoto obsahu typu
  • CS0463: Vyhodnocení desetinného výrazu konstanty selhalo s chybou: chyba
  • CS0543: "výčet" : hodnota enumerátoru je příliš velká, aby se vešla do svého typu.
  • CS0552: 'konverzní rutina' : uživatelem definovaný převod do/z rozhraní
  • CS0553: "konverzní rutina" : uživatelem definovaný převod na/z základní třídy
  • CS0554: 'konverzní rutina' : uživatelem definovaný převod na/z odvozené třídy
  • CS0555: Uživatelem definovaný operátor nemůže převzít objekt ohraničujícího typu a převést na objekt ohraničujícího typu.
  • CS0556: Převod definovaný uživatelem musí převést na nebo z uzavřeného typu
  • CS0557: Duplicitní uživatelsky definovaná konverze v rámci typu
  • CS0558: Operátor definovaný uživatelem musí být deklarován jako statický a veřejný.
  • CS0559: Typ parametru pro operátor ++ nebo -- musí být typ obsahující.
  • CS0562: Parametr unárního operátoru musí být obsahující typ.
  • CS0563: Jedním z parametrů binárního operátoru musí být typ obsahující
  • CS0564: První operand přetíženého operátoru posunu musí mít stejný typ jako obsahující typ a typ druhého operandu musí být int
  • CS0567: Rozhraní nemohou obsahovat operátory
  • CS0590: Uživatelem definované operátory nemůžou vracet void
  • CS0594: Konstanta s plovoucí desetinou čárkou je mimo rozsah typu "typ".
  • CS0652: Porovnání s integrální konstantou je zbytečné; konstanta je mimo rozsah typu "typ"
  • CS0659: 'class' přepisuje Object.Equals(object o), ale nepřepíše Object.GetHashCode()
  • CS0660: Typ definuje operator == nebo operator !=, ale nepřepíše Object.Equals(object o)
  • CS0661: Typ definuje operator == nebo operator !=, ale nepřepíše Object.GetHashCode()
  • CS0715: Statické třídy nemohou obsahovat uživatelem definované operátory
  • CS1021: Integrální konstanta je příliš velká
  • CS1037: Byl očekáván přetížitelný operátor
  • CS1553: Deklarace není platná; použijte modifikační operátor <dest-type> (...). namísto
  • CS8930: Explicitní implementace uživatelem definovaného operátoru musí být deklarována statická
  • CS8931: Převod definovaný uživatelem v rozhraní musí převádět na nebo z parametru typu, který je u nadřazeného typu omezen na tento nadřazený typ.
  • CS8778: Konstantní hodnota 'value' může přetékat 'type' za běhu (k přepsání použijte nezaškrtnutou syntaxi).
  • CS8973: Operace může přetékat za běhu (k přepsání použijte nezaškrtnutou syntaxi).
  • CS9023: Operátor nelze zkontrolovat.
  • CS9024: Operátor nelze nastavit jako nezjištěný.
  • CS9025: Operátor vyžaduje, aby byla deklarována také odpovídající nekontrolovaná verze.
  • CS9027: Neočekávané klíčové slovo "nezaškrtnuto".
  • CS9308: Uživatelem definovaný operátor musí být deklarován jako veřejný.
  • CS9310: Návratový typ tohoto operátoru musí být neplatný.
  • CS9311: Typ neimplementuje člena rozhraní. Typ nemůže implementovat člen, protože jeden z nich není operátor.
  • CS9312: Typ nemůže přepsat zděděný člen, protože jeden z nich není operátor.
  • CS9313: Přetížený operátor složeného přiřazení přebírá jeden parametr.
  • CS9340: Operátor nelze použít na operandy. Bude zobrazen nejbližší kandidát, který nelze použít.
  • CS9341: Operátor nelze použít pro operand. Zobrazuje se nejbližší neaplikovatelný kandidát.
  • CS9342: Rozlišení operátoru je nejednoznačné mezi následujícími členy.

Požadavky na podpis operátora

  • CS0448: Návratový typ operátoru ++ nebo -- musí být obsažený typ nebo odvozený z obsaženého typu.
  • CS0559: Typ parametru pro ++ nebo -- operátor musí být obsahující typ.
  • CS0562: Parametr unárního operátoru musí být obsahující typ.
  • CS0563: Jeden z parametrů binárního operátoru musí být obsahující typ.
  • CS0564: První operand přetíženého operátoru posunu musí mít stejný typ jako typ obsahujícího a typ druhého operandu musí být int.
  • CS0567: Rozhraní nemohou obsahovat operátory.
  • CS0590: Uživatelem definované operátory nemůžou vracet void.
  • CS9310: Návratový typ tohoto operátoru musí být neplatný.
  • CS9340: Operátor nelze použít na operandy. Zobrazen je nejbližší nepoužitelný kandidát.
  • CS9341: Operátor nelze použít na operand. Zobrazen bude nejbližší nevyhovující kandidát.
  • CS9342: Rozlišení operátoru je nejednoznačné mezi následujícími členy.

Každý typ operátoru má konkrétní parametr a požadavky na návratový typ definované specifikací jazyka. Úplná pravidla, u kterých operátorů lze přetížit, naleznete v tématu Přetížení operátoru a Operátory ve specifikaci jazyka C#.

  • Změňte návratový typ operátorů ++ nebo -- na typ, který obsahuje tyto operátory, nebo na typ z něj odvozený (CS0448). Jazyk vyžaduje, aby operátory přírůstku a dekrementace vrátily hodnotu kompatibilní s typem obsahujícího, aby se výsledek mohl přiřadit zpět ke stejné proměnné.
  • Změňte parametr operátoru ++ nebo -- na obsahující typ (CS0559). Operátory inkrementace a dekrementace musí fungovat s instancemi vlastního typu.
  • Změňte parametr unárního operátoru na typ obsahujícího (CS0562). Unární operátory musí přijmout operand typu, který je deklaruje.
  • Ujistěte se, že alespoň jeden parametr binárního operátoru je obsahující typ (CS0563). Binární operátory musí zahrnovat deklarující typ, aby je kompilátor mohl přeložit prostřednictvím daného typu.
  • Změňte první parametr operátoru shift na typ obsahující a druhý parametr na int (CS0564). Jazyk definuje posunovací operátory se specifickou signaturou: typ, který se posouvá, a celočíselnou hodnotu posunu.
  • Přesun deklarací operátorů mimo rozhraní a do tříd nebo struktur (CS0567). Tradiční (nestatické abstraktní) deklarace operátorů nejsou povoleny v rozhraních. Pro statické abstraktní operátory v rozhraních si přečtěte téma chyby členů statických abstraktních a virtuálních rozhraní.
  • Změňte návratový typ operátoru na typ bez void (CS0590). Většina uživatelem definovaných operátorů musí vrátit hodnotu. Výjimkou jsou operátory složeného přiřazení, které vyžadují návratový void typ (CS9310).
  • Opravte typy parametrů nebo přidejte chybějící přetížení operátoru, aby kompilátor mohl najít odpovídající operátor pro typy operandů používaných v lokalitě volání (CS9340, CS9341). Pokud neexistuje žádný použitelný operátor, kompilátor zobrazí nejbližšího kandidáta, který pomůže diagnostikovat neshodu.
  • Přidejte explicitní konverze na místě volání, nebo poskytněte konkrétnější přetížení operátorů, aby se eliminovala nejednoznačnost, pokud se více operátorových přetížení shoduje stejně dobře (CS9342).

Důležité

Požadavky na podpis pro statické binární operátory a odpovídající operátory složeného přiřazení instance jsou odlišné. Ujistěte se, že podpis odpovídá požadované deklaraci.

Požadavky na deklaraci operátoru

  • CS0558: Operátor definovaný uživatelem musí být deklarován jako statický a veřejný.
  • CS0715: Statické třídy nemohou obsahovat uživatelem definované operátory.
  • CS1037: Byl očekáván přetížitelný operátor.
  • CS1553: Deklarace není platná; použijte modifikační operátor <dest-type> (...). namísto.
  • CS9308: Uživatelem definovaný operátor musí být deklarován jako veřejný.

Jazyk vyžaduje specifické modifikátory a syntaxi pro deklarace operátorů. Úplná pravidla naleznete v tématu Přetížení operátoru a uživatelem definované převodní operátory.

  • Přidejte do deklarace operátoru static oba public modifikátory (CS0558, CS9308). Jazyk C# vyžaduje, aby všechny uživatelem definované operátory byly statické i veřejné, aby byly přístupné a volatelné bez instance.
  • Přesuňte deklaraci operátoru ze statické třídy do nestatické třídy nebo struktury (CS0715). Statické třídy nemohou mít instance, takže uživatelem definované operátory , které pracují s instancemi jejich typu, nejsou smysluplné ve statických třídách.
  • Nahraďte neplatný symbol operátoru platným přetížitelným operátorem (CS1037). Přetížit lze pouze konkrétní operátory definované jazykem.
  • Opravte syntaxi tak, aby dodržovala požadovaný tvar operátoru převodu: public static implicit operator <dest-type>(<source-type> parameter) nebo public static explicit operator <dest-type>(<source-type> parameter) (CS1553). Kompilátor očekává, že operátory převodu budou následovat za konkrétním vzorem deklarace.

Chyby související s explicitními implementacemi rozhraní operátorů ve statických abstraktních rozhraních najdete v tématu Statické abstraktní a virtuální chyby členů rozhraní.

Nekonzistentní přístupnost

  • CS0056: Nekonzistentní přístupnost: návratový typ "typ" je méně přístupný než operátor 'operator'.
  • CS0057: Nekonzistentní přístupnost: typ parametru 'type' je méně přístupný než operátor 'operator'.

Všechny typy používané v podpisu veřejného operátora musí být alespoň tak přístupné jako samotný operátor. Úplná pravidla najdete v tématu Modifikátory přístupu a omezení přístupnosti ve specifikaci jazyka C#.

  • Změňte návratový typ na typ, který je alespoň tak přístupný jako operátor, nebo snižte přístupnost operátoru tak, aby odpovídala přístupnosti návratového typu (CS0056). Operátor public nemůže prostřednictvím návratové hodnoty odhalit méně dostupný typ, protože volající mimo assembly by výsledek nemohli použít.
  • Změňte typ parametru na typ, který je alespoň tak přístupný jako operátor, nebo snižte přístupnost operátoru tak, aby odpovídal typu parametru (CS0057). Operátor public nemůže jako parametr vyžadovat méně přístupný typ, protože volající mimo sestavení by nemohl argument zadat.

Uživatelsky definovaná omezení převodu

  • CS0552: Uživatelem definovaný převod na/z rozhraní.
  • CS0553: Převod definovaný uživatelem na/ze základní třídy.
  • CS0554: Převod definovaný uživatelem na/z odvozené třídy.
  • CS0555: Uživatelem definovaný operátor nemůže vzít objekt ohraničujícího typu a převést na objekt ohraničujícího typu.
  • CS0556: Převod definovaný uživatelem musí převést na nebo z obklopujícího typu.
  • CS0557: Duplicitní uživatelem definovaný převod typu.

Jazyk C# omezuje typy, které se můžou účastnit uživatelsky definovaných převodů. Úplná pravidla najdete v tématu Operátory převodu definované uživatelem a převodní operátory ve specifikaci jazyka C#.

  • Odeberte operátor převodu, který převádí do nebo z typu rozhraní (CS0552). Jazyk zakazuje uživatelsky definované konverze zahrnující typy rozhraní, protože konverze rozhraní jsou zpracovávány pomocí referenčních konverzí systému typů a boxování. Místo toho použijte explicitní implementace rozhraní nebo pomocné metody.
  • Odeberte operátor převodu, kterým se převádí na nebo ze základní třídy (CS0553). Převody mezi typem a jeho základní třídou již existují prostřednictvím implicitních převodů odkazů (upcast) a explicitních převodů odkazů (downcast), takže uživatelem definovaný převod by vytvořil nejednoznačnost.
  • Odeberte operátor převodu, který provádí konverzi na nebo z odvozené třídy (CS0554). Stejně jako převody základní třídy jsou převody mezi typem a jeho odvozenými typy integrovány do jazyka prostřednictvím dědičnosti a uživatelsky definované převody by s nimi kolidovaly.
  • Odeberte operátor převodu, který převede uzavřený typ na sebe (CS0555). Každý typ již má implicitní převod identity na sebe, takže uživatelem definovaný převod z typu na stejný typ je redundantní a nepovoluje se.
  • Změňte jeden z typů v operátoru převodu tak, aby zdrojový nebo cílový typ byl uzavřený typ (CS0556). Převod definovaný uživatelem musí zahrnovat typ, který ho deklaruje – převod mezi dvěma nesouvisejícími externími typy ve třetím typu definovat nemůžete.
  • Odeberte operátor duplicitního převodu nebo změňte jeden z duplicitních operátorů tak, aby se zdrojový a cílový typ liší od druhého (CS0557). Typ může deklarovat pouze jeden implicitní a jeden explicitní převod pro libovolnou dvojici zdrojových a cílových typů.

Logické operátory a operátory zkratek

  • CS0215: Návratový typ operátoru true nebo false musí být bool.
  • CS0216: Operátor vyžaduje, aby byl definován také odpovídající operátor.
  • CS0217: Aby bylo možné použít jako operátor zkratového okruhu, musí mít uživatelem definovaný logický operátor stejný návratový typ jako typ jeho 2 parametrů.
  • CS0218: Typ musí obsahovat deklarace operátoru true a operátor false.

Jazyk C# vyžaduje specifické párování a podpisy pro logické operátory a vyhodnocení zkratek. Úplná pravidla naleznete v tématu true a false operátory, logické operátory a uživatelem definované podmíněné logické operátory ve specifikaci jazyka C#.

  • Změňte návratový typ operator true a operator false na bool (CS0215). Tyto operátory určují, zda je hodnota logicky pravdivá nebo nepravda, takže jazyk vyžaduje, aby se vrátily bool.
  • Definujte odpovídající spárovaný operátor (CS0216). Jazyk vyžaduje, aby byly určité operátory deklarovány ve dvojicích: operator == s operator !=, operator < s operator >, operator <= s operator >= a operator true s operator false.
  • Změňte návratový typ operátoru definovaného uživatelem & nebo |, tak aby odpovídal oběma typům parametrů (CS0217). Pro zkrácené vyhodnocení (&& a ||) vyžaduje kompilátor, aby návratový typ operátoru & nebo |, oba typy parametrů a obsahující typ byly všechny stejného typu.
  • Přidejte obě operator true deklarace do operator false typu (CS0218). Kompilátor přepíše && a || za použití operator true, operator false a odpovídajícího & nebo | operátoru, takže všechny tři musí být přítomny, aby zkratové vyhodnocení fungovalo.

Kontrolované operátory

  • CS9023: Operátor nelze nastavit jako ověřovaný
  • CS9024: Operátor nelze nastavit jako neověřený
  • CS9025: Kontrolovaný operátor vyžaduje, aby byla deklarována také odpovídající nekontrolovaná verze.
  • CS9027: Neočekávané klíčové slovo "nezaškrtnuté"

Klíčová checked slova a unchecked klíčová slova lze použít pouze u konkrétních deklarací operátorů. Úplná pravidla najdete v tématu Aritmetické operátory a operátory definované uživatelem.

  • Pokud operátor není podporován, odeberte klíčové slovo checked nebo unchecked (CS9023, CS9024). Pouze aritmetické operátory +, -, *, /, ++, -- a explicitní převodní operátory podporují kontrolované a nekontrolované varianty. Jiné operátory, například operátory porovnání nebo rovnosti, nemají specifické chování při přetečení a nelze je označit jako kontrolované nebo nekontrolované.
  • Přidejte odpovídající neověřenou verzi operátoru (CS9025). checked Operátor poskytuje chování vyvolané přetečením, ale kompilátor potřebuje také odpovídající nezaškrtnutou verzi, která se použije v unchecked kontextech a jako výchozí, pokud není zadaný žádný kontext.
  • unchecked Odeberte klíčové slovo z neplatné pozice (CS9027). Klíčové unchecked slovo v deklaraci operátoru je platné pouze jako součást syntaxe operátoru (například public static explicit operator unchecked int(MyType t)). Umístění na jiné místo v deklaraci způsobí chybu syntaxe.

Požadavky na rozhraní a dědičnost

  • CS9311: Typ neimplementuje člena rozhraní. Typ nemůže implementovat člena, protože jeden z nich není operátor.
  • CS9312: Typ nemůže přepsat zděděný člen, protože jeden z nich není definován jako operátor
  • CS9313: Přetížený operátor složeného přiřazení přebírá jeden parametr

Kompilátor vynucuje přísné porovnávání mezi deklaracemi operátorů a členy rozhraní nebo členy základní třídy, které implementují nebo přepisují. Úplná pravidla naleznete v tématu Přetížení operátoru a rozhraní.

  • Změňte implementovaného člena na deklaraci operátoru, která odpovídá členu operátoru rozhraní, nebo změňte člen rozhraní na metodu, pokud implementční člen je metoda (CS9311). Operátor může implementovat pouze člena rozhraní, který je také deklarován jako operátor – nemůžete splnit podmínku operátoru běžnou metodou nebo naopak.
  • Změňte přetěžujícího člena na deklaraci operátoru, která odpovídá členu operátoru základní třídy, nebo změňte člen základní třídy na metodu, pokud je člen odvozené třídy metodou (CS9312). Podobně jako implementace rozhraní musí přepsání odpovídat typu člena, který se přepisuje – operátor nemůže přepsat neoperatorského člena.
  • Změňte deklaraci operátoru složeného přiřazení tak, aby přijímala přesně jeden parametr (CS9313). Složené operátory přiřazení jsou členy instance, kde levý operand je implicitně this, takže pouze pravý operand je deklarován jako parametr.

Operátory rovnosti

  • CS0659: 'class' přepisuje Object.Equals(object o), ale nepřepisuje Object.GetHashCode()
  • CS0660: Typ definuje operátor == nebo operátor !=, ale nepřepíše Object.Equals(object o)
  • CS0661: Typ definuje operátor == nebo operátor !=, ale nepřepisuje Object.GetHashCode()

Kompilátor vyžaduje, aby přepisy související s rovností a definice operátorů zůstaly synchronizované. Při přepsání Object.Equals nebo definování operator == / operator !=musíte také zadat související přepsání. Úplná pravidla naleznete v tématu Definování rovnosti hodnot pro typ a operátory rovnosti.

  • Přidejte přepsání Object.GetHashCode když přepisujete Object.Equals (CS0659). Kolekce založené na hashování jako Dictionary<TKey,TValue> a HashSet<T> spoléhají na dohody, že dva předměty, které jsou si rovny, musí vrátit stejný hash kód. Bez odpovídajícího přepsání GetHashCode mohou objekty, které se porovnávají jako stejné, hashovat do různých slotů, což způsobuje, že vyhledávání a deduplikace selhává tiše.
  • Přidejte přepsání Object.Equals, když definujete operator == nebo operator != (CS0660) Kód, který volá Equals přímo – včetně mnoha rozhraní API architektury, metod LINQ a operací shromažďování – nebude používat váš vlastní operátor. Bez konzistentního Equals překrytí mohou být stejné dva objekty považovány za rovné podle == ale ne podle Equals, což vede k nepředvídatelnému chování.
  • Přidejte přepsání Object.GetHashCode při definici operator == nebo operator != (CS0661) Stejně jako CS0659 musíte GetHashCode být v souladu se sémantikou rovnosti. Pokud operator == se považuje dva objekty za stejné, ale vrátí různé hashovací kódy, kolekce založené na hodnotě hash nebudou fungovat správně.

Chyby přetečení a podtečení

  • CS0031: Konstantní hodnota "value" nelze převést na typ.
  • CS0220: Operace přeteče v době kompilace v kontrolovaném režimu
  • CS0221: Konstantní hodnota "value" nelze převést na typ (k přepsání použijte syntaxi nezaškrtnutou).
  • CS0463: Vyhodnocení desetinného konstantního výrazu selhalo s chybou: 'chyba'
  • CS0543: "výčet" : hodnota enumerátoru je příliš velká, aby se vešla do svého typu.
  • CS0594: Plovoucí konstanta je mimo rozsah typu 'typ'.
  • CS0652: Porovnání s integrální konstantou je zbytečné; konstanta je mimo rozsah typu "typ"
  • CS1021: Integrální konstanta je příliš velká
  • CS8778: Konstantní hodnota 'value' může přetéct 'type' při běhu programu (k přepsání použijte syntaxi 'unchecked').
  • CS8973: Operace může přetékat za běhu (k přepsání použijte nezaškrtnutou syntaxi).

Kompilátor vyhodnocuje konstantní výrazy v době kompilace a hlásí chyby nebo upozornění, když hodnota překročí platný rozsah svého cílového typu. Úplná pravidla najdete v Zaškrtnuté a Nezaškrtnuté Příkazy a Celočíselné Typy.

  • Změňte konstantní hodnotu na hodnotu, která odpovídá rozsahu cílového typu, nebo změňte cíl na větší číselný typ (CS0031). Kompilátor nemůže implicitně zúžit konstantu, která se nevejde – například přiřazení 256 k rozsahu byte 0–255 způsobí tuto chybu. Pokud je zkrácení úmyslné, použijte explicitní přetypování v unchecked kontextu.
  • Opravte aritmetickou hodnotu ve výrazu konstanty tak, aby výsledek odpovídal cílovému typu, nebo výraz zabalte do nezaškrtnutého kontextu, aby bylo možné bezobslužné přetečení (CS0220). Kompilátor ve výchozím nastavení vyhodnotí celý konstantní výraz v době kompilace v kontrolovaném kontextu, takže přechodné nebo konečné výsledky, které překračují rozsah typu, způsobí tuto chybu.
  • Změňte konstantní hodnotu nebo cílový typ tak, aby byl převod platný, nebo výraz zabalte do unchecked kontextu, pokud chcete úmyslně zkrátit výsledek (CS0221). Na rozdíl od CS0220 se tato chyba vztahuje na explicitní převody konstant, kde zdrojová hodnota neodpovídá cílovému typu.
  • Zjednodušte nebo rozdělte decimal konstantní výraz tak, aby zůstal v rozsahu a přesnosti decimal typu (CS0463). Typ decimal má maximální hodnotu přibližně $7,9 \times 10^{28}$ a 28–29 významných číslic a kompilátor vyhodnocuje úplný výraz v době kompilace.
  • Změňte hodnotu člena výčtu na hodnotu, která se vejde do podkladového typu výčtu, nebo změňte základní typ na větší celočíselný typ (CS0543). Ve výchozím nastavení výčty používají int jako základní typ. Pokud hodnota člena překračuje rozsah podkladového typu, zadejte větší typ, například long.
  • Změňte konstantu s plovoucí řádovou čárkou na hodnotu v rozsahu cílového typu, nebo místo float použijte typ vyšší přesnosti, jako je double (CS0594). Typ float podporuje hodnoty až přibližně 3,4 \krát 10^{38}, a double podporuje až přibližně 1,7 \krát 10^{308}.
  • Odeberte nebo opravte porovnání tak, aby konstanta byla v rozsahu typu proměnné (CS0652). Porovnání proměnné, například byte s 300 , nemůže být nikdy pravda, takže kompilátor varuje, že toto porovnání je zbytečné. Toto upozornění často označuje chybu logiky nebo neshodu mezi typem proměnné a zamýšleným rozsahem hodnot.
  • Použijte větší číselný typ nebo rozdělte hodnotu mezi více operací (CS1021). K této chybě dochází, když celočíselný literál překročí rozsah dokonce největšího celočíselného typu (ulongaž $1,8 \krát 10^{19}$). U hodnot nad rámec tohoto rozsahu zvažte použití BigInteger.
  • Zabalte výraz do unchecked kontextu, aby se potlačí upozornění, nebo změňte hodnotu tak, aby odpovídala rozsahu cílového typu (CS8778). Toto upozornění označuje konstantní převod, který může ztratit data za běhu – kompilátor nemůže prokázat, že přetečení se určitě stane, ale identifikuje riziko.
  • Zabalte výraz do unchecked kontextu, abyste potlačili upozornění, nebo restrukturalizujte aritmetiku, aby se předešlo potenciálnímu přetečení (CS8973). Toto upozornění je podobné cs8778 , ale vztahuje se na aritmetické operace místo převodů – kompilátor zjistí, že operace může přetékat za běhu.