Řešení chyb a upozornění generovaných z výrazů zakázaných ve stromech výrazů
Tento článek se zabývá následujícími chybami kompilátoru:
- - V stromech výrazů nelze použít částečné metody pouze s definicí deklarace nebo odebráním podmíněných metod.
- CS0831 - Strom výrazů nemusí obsahovat základní přístup.
- CS0832 - Strom výrazů nemusí obsahovat operátor přiřazení
- CS0834 - Výraz lambda s textem příkazu nelze převést na strom výrazu.
- CS0835 - Nelze převést lambda na strom výrazu, jehož typ argument 'type' není typu delegáta.
- CS0838 - Strom výrazů nemusí obsahovat multidimenzionální inicializátor pole.
- CS0845 - Lambda stromu výrazů nesmí obsahovat operátor sjednocení s hodnotou null nebo výchozí literálovou levou stranou.
- CS0853 - Strom výrazů nemusí obsahovat specifikaci pojmenovaného argumentu.
- CS0854 - Strom výrazů nemusí obsahovat volání nebo vyvolání, které používá volitelné argumenty.
- Cs0855 - Strom výrazu nemusí obsahovat indexovanou vlastnost.
- CS1944 - Strom výrazů nemusí obsahovat nebezpečnou operaci ukazatele.
- CS1945 - Strom výrazů nemusí obsahovat výraz anonymní metody.
- CS1946 - Výraz anonymní metody nelze převést na strom výrazu.
- CS1951 - Lambda stromu výrazů nemusí obsahovat
in
ref
parametr nebo .out
- CS1952 - Lambda stromu výrazů nemusí obsahovat metodu s argumenty proměnných.
- CS1963 - Strom výrazů nemusí obsahovat dynamickou operaci.
- Výrazy asynchronního lambda CS1989 - nelze převést na stromy výrazů.
- CS2037 - Lambda stromu výrazů nemusí obsahovat volání modelu COM s odkazem vynechaným u argumentů.
- CS7053 - Strom výrazů nemusí obsahovat funkci.
- CS8072 - Lambda stromu výrazů nemusí obsahovat operátor šíření null.
- CS8074 - Lambda stromu výrazů nemusí obsahovat inicializátor slovníku.
- CS8075 - Rozšiřující
Add
metoda není podporována pro inicializátor kolekce ve výrazu lambda. - CS8110 - Strom výrazů nemusí obsahovat odkaz na místní funkci.
- CS8122 - Strom výrazů nemusí obsahovat
is
operátor porovnávání vzorů. - CS8143 - Strom výrazů nemusí obsahovat literál řazené kolekce členů.
- CS8144 - Strom výrazů nemusí obsahovat převod řazené kolekce členů.
- CS8153 - Lambda stromu výrazů nemusí obsahovat volání metody, vlastnosti nebo indexeru, který vrací odkazem.
- Výrazy CS8155 - Lambda, které vrací odkaz, nelze převést na stromy výrazů.
- CS8188 - Strom výrazu nemusí obsahovat výraz throw-expression.
- CS8198 - Strom výrazu nemusí obsahovat deklaraci proměnné argumentu out.
- Cs8207 - Strom výrazů nemusí obsahovat zahození.
- CS8382 - Strom výrazů nemusí obsahovat řazenou
==
kolekci členů nebo!=
operátor. - CS8514 - Strom výrazu nemusí obsahovat výraz switch.
- Strom výrazů CS8640 - nemůže obsahovat hodnotu struktury odkazu nebo omezeného typu.
- CS8642 - Strom výrazů nemusí obsahovat přiřazení nulového shodování.
- Cs8790 - Strom výrazů nemusí obsahovat vzor System.Index nebo System.Range přístup indexeru.
- CS8791 - Strom výrazů nemusí obsahovat výraz od konce indexu ('
^
' ). - CS8792 - Strom výrazů nemusí obsahovat výraz oblasti ('
..
). - CS8810' pro -
&
skupiny metod nelze použít ve stromech výrazů. - CS8849 - Strom výrazu nemusí obsahovat
with
výraz -expression. - CS8927 - Strom výrazů nemusí obsahovat přístup statického virtuálního nebo abstraktního člena rozhraní.
- CS8952 - Strom výrazů nemusí obsahovat interpolovaný převod obslužné rutiny řetězce.
- Výraz lambda s atributy cs8972 - nelze převést na strom výrazů.
- CS9170 - Strom výrazů nemusí obsahovat vložený přístup k poli nebo převod.
- CS9175 - Strom výrazů nemusí obsahovat výraz kolekce.
- CS9226 - Strom výrazů nemusí obsahovat rozšířenou formu parametru kolekce parametrů bez pole.
Omezení stromu výrazů
Všechny chyby v předchozím seznamu značí, že jste použili typ výrazu jazyka C#, který není ve stromu výrazů povolený. Ve většině případů zakázané výrazy představují syntaxi zavedenou po jazyce C# 3.0. Tyto výrazy jsou zakázány, protože jejich povolení by vytvořilo zásadní změnu ve všech knihovnách, které analyzují stromy výrazů. Pokud by byly povoleny novější konstrukce, je potřeba rozšířit všechny knihovny, aby se parsovaly nové výrazy jazyka C#.
Následující výrazy jsou zakázány:
- Vyvolání částečných metod , které nemají implementační deklaraci.
- Vyvolání podmíněných metod , které byly odebrány.
- Vyvolání místních funkcí
async
výrazy lambda nejsou povolené.- Použití
base
přístupu k přímému volání virtuální metody deklarované v základní třídě. - operace přiřazení .
- výrazy lambda nejsou povoleny .
- inicializátory multidimenzionálních polí . Místo toho je nutné vytvořit a inicializovat multidimenzionální pole mimo strom výrazu.
dynamic
operace nejsou povoleny.- výrazy porovnávání vzorů nejsou povoleny.
- Literály řazené kolekce členů a mnoho operací řazené kolekce členů, například porovnání rovnosti, nejsou povoleny.
throw
výrazy nejsou povolené.- zahození (
_
) deklarací. - Operátory indexu a rozsahu nejsou povolené.
- Nedestruktivní mutování pomocí
with
výrazů není povoleno. - Nelze deklarovat vložená pole ani k němu přistupovat.
- Výrazy kolekce nemůžete zahrnout.
- Operátory šíření null a nulového shodování nejsou povoleny.
ref struct
typy, jako System.Span<T> jsou a System.ReadOnlySpan<T> nejsou povolené.in
,out
aref
parametry, včetněout
deklarací proměnných, nejsou povolené.ref
návraty nejsou povoleny.- Volání metod, které vracejí
ref
, nejsou povoleny. - Ke statickým abstraktním členům rozhraní nelze získat přístup.
- Vložená pole.
params
Modifikátor je povolen pouze u jednorozměrných polí. Jiné typy kolekcí nejsou povolené.
Další omezení jsou:
- Atributy nelze použít u výrazu lambda, jeho parametrů nebo návratu.
- Výraz lambda musí být konvertibilní na typ odvozený z System.Linq.Expressions.Expression jehož parametru typu je typ delegáta.
- pojmenované a volitelné parametry jsou omezené. Výraz nemůže volat metodu určující pojmenované argumenty a nemůže použít výchozí hodnotu volitelného parametru.
- Inicializátory slovníku nejsou povoleny . Ani jedna z nich nejsou rozšiřující
Add
metody. - Cílový výraz musí být výraz lambda. Konstanty a proměnné nejsou povoleny, ale výraz lambda, který vrací konstantu nebo proměnnou, je.
- Nebezpečné operace ukazatele nejsou povolené.
- Volání modelu COM musí obsahovat
ref
argumenty. Není možné ho předpokládat. - Nepodporované
__arglist
klíčové slovo není povolené.
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.