Sdílet prostřednictvím


Ř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 refparametr 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í obsahovatis 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 withvý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:

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é.