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 a upozorněními kompilátoru:
- CS8108: Argument s dynamickým typem nelze předat parametru `params` „parameter“ místní funkce „method“.
- CS8112: Místní funkce "metoda" musí deklarovat tělo, protože není označeno jako static extern.
- CS8321: Místní funkce "metoda" je deklarována, ale nikdy se nepoužívá.
- CS8421: Statická místní funkce nemůže obsahovat odkaz na proměnnou.
- CS8422: Statická místní funkce nemůže obsahovat odkaz na tuto nebo základní funkci.
Místní funkce byly přidány v jazyce C# 7.0. Umožňují deklarovat pomocné metody uvnitř jiného členu. Diagnostika v tomto článku se zabývá deklaracemi místních funkcí, voláními, používáním a dodatečnými omezeními zachycení místních static funkcí.
Těla místních funkcí
- CS8112: Místní funkce "metoda" musí deklarovat tělo, protože není označeno jako static extern.
Deklarace místní funkce musí obsahovat tělo, pokud není místní funkce deklarována jako static extern. Přidejte k místní funkci tělo bloku nebo tělo výrazu. Pokud je implementace poskytována externě, označte místní funkci static extern a ujistěte se, že deklarace dodržuje pravidla pro externí metody.
Parametry a dynamické argumenty
- CS8108: Argument s dynamickým typem nelze předat parametru parametru "parameter" místní funkce "method".
Volání místní funkce nemůže předat dynamic jako argument parametru params. Převeďte hodnotu na typ prvku nebo typ pole očekávaný parametrem params před voláním. Hodnoty můžete také uložit do explicitně zadaného pole a předat ho do místní funkce.
Nepoužité místní funkce
- CS8321: Místní funkce "metoda" je deklarována, ale nikdy se nepoužívá.
Kompilátor hlásí toto upozornění, když deklarujete místní funkci, ale nevolá ji žádný dosažitelný kód. Odeberte nepoužívané místní funkce nebo ji zavolejte z nadřazeného člena. Pokud máte v úmyslu použít místní funkci v budoucí změně, ponechte ji mimo zdroj, dokud nebude potřeba.
Statické místní funkce nemůžou zachytit stav
- CS8421: Statická místní funkce nemůže obsahovat odkaz na proměnnou.
- CS8422: Statická místní funkce nemůže obsahovat odkaz na tuto nebo základní funkci.
static Místní funkce nemůže zachytávat stav z vnějšího rozsahu. Nemůže odkazovat na uzavření místních proměnných, parametrů, členů instance prostřednictvím thisnebo this samotného. Předejte každou hodnotu, kterou místní funkce potřebuje jako parametr (CS8421, CS8422). Pokud místní funkce potřebuje zachytit proměnné nebo stav instance z okolního oboru platnosti, odeberte modifikátor static.
Následující příklad ukazuje odkazy, které způsobují CS8422:
public class C
{
private int counter = 1;
public void IncreaseCounter()
{
static void LocalFunc(int addition)
{
this.counter += addition; // CS8422
base.ToString(); // CS8422
counter += addition; // CS8422: implicit this
ToString(); // CS8422: implicit base
}
LocalFunc(10);
}
}
Pokud chcete opravit CS8422, předejte požadovaná data instance do místní funkce, přesuňte pomocnou rutinu mimo kontext instance nebo odeberte static , když místní funkce musí přistupovat ke stavu instance.
Související diagnostika
- Další informace o místních funkcích v stromech výrazů najdete v tématu Některé výrazy jsou zakázány ve stromech výrazů ve zprávách kompilátoru jazyka C#.
- Další informace o místních funkcích s parametry obecného typu naleznete v tématu Řešení chyb a upozornění souvisejících s parametry obecného typu a argumenty typů ve zprávách kompilátoru jazyka C#.
- Další informace o atributech v místních funkcích naleznete v tématu Řešení chyb a upozornění, které zahrnují deklaraci atributu a použití atributu v kódu ve zprávách kompilátoru jazyka C#.
- Další informace o zachycených proměnných v anonymních funkcích naleznete v tématu Chyby a upozornění výrazů lambda ve zprávách kompilátoru jazyka C#.
- Další informace o zachycení v konstruktorech a primárních konstruktorech naleznete v tématu Řešení chyb souvisejících s deklaracemi konstruktoru a inicializátory modulů ve zprávách kompilátoru jazyka C#.