RuntimeHelpers.GetSubArray zwraca inny typ
Typ wystąpienia tablicy zwróconego przez RuntimeHelpers.GetSubArray<T>(T[], Range) element został zmieniony tak, aby był zgodny z tablicą źródłową. RuntimeHelpers.GetSubArray
jest używany przez kompilator języka C# do implementowania operatora zakresu dla tablic.
Tę zmianę zachowania można zaobserwować tylko za pomocą kodu, który używa kowariantnych konwersji tablicy.
Poprzednie zachowanie
RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
Wcześniej zwrócił wystąpienie tablicy typu T[]
.
Na przykład typ wystąpienia tablicy zwrócony przez RuntimeHelpers.GetSubArray<object>(new string[1], ...)
element to object[]
.
Nowe zachowanie
Począwszy od platformy .NET 9, RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
zwraca wystąpienie tablicy tego samego typu co array
parametr .
Na przykład typ wystąpienia tablicy zwrócony przez RuntimeHelpers.GetSubArray<object>(new string[1], ...)
string[]
to .
Wprowadzona wersja
.NET 9 (wersja zapoznawcza 1)
Typ zmiany powodującej niezgodność
Ta zmiana jest zmianą behawioralną.
Przyczyna wprowadzenia zmiany
Projekt funkcji dopasowywania wzorców w języku C# zakłada, że typ wystąpienia tablicy zwracany przez RuntimeHelpers.GetSubArray<T>(T[], Range) jest zgodny z tablicą źródłową. Poprzednie zachowanie doprowadziło do nieoczekiwanego zachowania niektórych złożonych wyrażeń wzorców, które używały fragmentowania tablic kowariantnych. Aby uzyskać więcej informacji, zobacz dotnet/roslyn#69053.
Zalecana akcja
Zalecaną akcją jest usunięcie zależności kodu, którego dotyczy problem, wariancji tablicowej.
Na przykład zmień:
object[] arr = new string[1];
M(arr[1..2]);
na:
string[] arr = new string[1];
M(arr[1..2]);
Dotyczy interfejsów API
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla