Condividi tramite


RuntimeHelpers.GetSubArray restituisce un tipo diverso

Il tipo di istanza di matrice restituita da RuntimeHelpers.GetSubArray<T>(T[], Range) è stato modificato in modo che corrisponda alla matrice di origine. RuntimeHelpers.GetSubArray viene usato dal compilatore C# per implementare l'operatore di intervallo per le matrici.

Questa modifica del comportamento può essere osservata solo dal codice che usa conversioni di matrici covarianti.

Comportamento precedente

In precedenza, RuntimeHelpers.GetSubArray<T>(T[] array, Range range) restituiva un'istanza di matrice di tipo T[].

Ad esempio, il tipo di istanza della matrice restituita da RuntimeHelpers.GetSubArray<object>(new string[1], ...) era object[].

Nuovo comportamento

A partire da .NET 9, RuntimeHelpers.GetSubArray<T>(T[] array, Range range) restituisce un'istanza di matrice dello stesso tipo del parametro array.

Ad esempio, il tipo di istanza della matrice restituita da RuntimeHelpers.GetSubArray<object>(new string[1], ...) è string[].

Versione di introduzione

.NET 9 Anteprima 1

Tipo di modifica che causa un'interruzione

Questa è una modifica funzionale.

Motivo della modifica

La progettazione delle funzionalità dei criteri di ricerca C# presuppone che il tipo di istanza della matrice restituita da RuntimeHelpers.GetSubArray<T>(T[], Range) corrisponda alla matrice di origine. Il comportamento precedente ha portato a un comportamento imprevisto di determinate espressioni per i criteri complesse che usavano il sezionamento di matrici covarianti. Per altre informazioni, vedere dotnet/roslyn issue 69053.

L'azione consigliata consiste nel rimuovere la dipendenza del codice interessato dalla covarianza delle matrici.

Ad esempio, modificare:

object[] arr = new string[1];
M(arr[1..2]);

in:

string[] arr = new string[1];
M(arr[1..2]);

API interessate