Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano następujące błędy i ostrzeżenia kompilatora:
- CS8108: Nie można przekazać argumentu o typie dynamicznym do parametru params „parameter” funkcji lokalnej „method”.
- CS8112: Funkcja lokalna „method” musi zawierać treść, ponieważ nie jest oznaczona jako „static extern”.
- CS8321: funkcja lokalna "method" jest zadeklarowana, ale nigdy nie jest używana
- CS8421: Statyczna funkcja lokalna nie może zawierać odwołania do zmiennej.
- CS8422: Statyczna funkcja lokalna nie może zawierać odwołania do "this" lub "base".
Funkcje lokalne zostały dodane w języku C# 7.0. Umożliwiają deklarowanie metod pomocniczych wewnątrz innej składowej. Diagnostyki omówione w tym artykule obejmują deklaracje funkcji lokalnych, wywołania, ich użycie oraz dodatkowe ograniczenia dotyczące przechwytywania dla funkcji lokalnych static.
Lokalne jednostki funkcji
- CS8112: Funkcja lokalna "method" musi zadeklarować treść, ponieważ nie jest oznaczona jako "statyczny extern".
Deklaracja funkcji lokalnej musi zawierać treść, chyba że funkcja lokalna jest zadeklarowana static extern. Dodaj treść bloku lub treść wyrażenia do funkcji lokalnej. Jeśli implementacja jest dostarczana zewnętrznie, oznacz funkcję static extern lokalną i upewnij się, że deklaracja jest zgodna z regułami metod zewnętrznych.
Parametry parametrów i argumenty dynamiczne
- CS8108: Nie można przekazać argumentu o typie dynamicznym do parametru `params` 'parameter' funkcji lokalnej 'method'.
Wywołanie funkcji lokalnej nie może przekazać argumentu dynamic do parametru params . Przekonwertuj wartość na typ elementu lub typ tablicy oczekiwany przez parametr params przed wywołaniem. Można również przechowywać wartości w jawnie wpisanej tablicy i przekazywać tę tablicę do funkcji lokalnej.
Nieużywane funkcje lokalne
- CS8321: funkcja lokalna "method" jest zadeklarowana, ale nigdy nie jest używana
Kompilator zgłasza to ostrzeżenie podczas deklarowania funkcji lokalnej, ale nie można wywołać go w kodzie dostępnym. Usuń nieużywaną funkcję lokalną lub wywołaj ją z elementu zawierającego. Jeśli zamierzasz użyć funkcji lokalnej w przyszłej zmianie, zachowaj ją poza źródłem, dopóki nie będzie potrzebna.
Statyczne funkcje lokalne nie mogą przechwytywać stanu
- CS8421: Statyczna funkcja lokalna nie może zawierać odwołania do zmiennej.
- CS8422: Statyczna funkcja lokalna nie może zawierać odwołania do "this" lub "base".
Funkcja lokalnastatic nie może przechwytywać stanu z otaczającego zakresu. Nie może odwoływać się do lokalnych zmiennych zakresu zewnętrznego, parametrów ani składowych wystąpienia za pośrednictwem this ani samego this. Przekaż każdą wartość, która wymaga funkcji lokalnej jako parametru (CS8421, CS8422). Jeśli funkcja lokalna musi przechwytywać zmienne lub stan instancji z otaczającego zakresu, usuń modyfikator static.
W poniższym przykładzie przedstawiono odwołania, które wywołują 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);
}
}
Aby naprawić cs8422, przekaż wymagane dane wystąpienia do funkcji lokalnej, przenieś pomocnika poza kontekst wystąpienia lub usuń static , gdy funkcja lokalna musi uzyskać dostęp do stanu wystąpienia.
Powiązana diagnostyka
- Aby uzyskać więcej informacji na temat funkcji lokalnych w drzewach wyrażeń, zobacz Niektóre wyrażenia są zabronione w drzewach wyrażeń w komunikatach kompilatora języka C#.
- Aby uzyskać więcej informacji na temat funkcji lokalnych z ogólnymi parametrami typu, zobacz Rozwiązywanie błędów i ostrzeżeń związanych z ogólnymi parametrami typu i argumentami typu w komunikatach kompilatora języka C#.
- Aby uzyskać więcej informacji na temat atrybutów funkcji lokalnych, zobacz Rozwiązywanie błędów i ostrzeżeń obejmujących deklarację atrybutu i użycie atrybutu w kodzie w komunikatach kompilatora języka C#.
- Aby uzyskać więcej informacji na temat przechwyconych zmiennych w funkcjach anonimowych, zobacz Błędy wyrażeń lambda i ostrzeżenia w komunikatach kompilatora języka C#.
- Aby uzyskać więcej informacji na temat przechwytywania w konstruktorach i konstruktorach podstawowych, zobacz Rozwiązywanie błędów związanych z deklaracjami konstruktorów i inicjatorami modułów w komunikatach kompilatora języka C#.