RuntimeHelpers.GetSubArray возвращает другой тип
Тип экземпляра массива, возвращаемого RuntimeHelpers.GetSubArray<T>(T[], Range) измененным для сопоставления исходного массива. RuntimeHelpers.GetSubArray
используется компилятором C# для реализации оператора диапазона для массивов.
Это изменение поведения можно наблюдать только в коде, использующего преобразования ковариантного массива.
Прежнее поведение
RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
Ранее возвращен экземпляр массива типаT[]
.
Например, тип возвращаемого RuntimeHelpers.GetSubArray<object>(new string[1], ...)
экземпляра массива.object[]
Новое поведение
Начиная с .NET 9, RuntimeHelpers.GetSubArray<T>(T[] array, Range range)
возвращает экземпляр массива того же типа, что array
и параметр.
Например, тип экземпляра массива, возвращенного RuntimeHelpers.GetSubArray<object>(new string[1], ...)
string[]
.
Представленные версии
.NET 9( предварительная версия 1)
Тип критического изменения
Причина изменения
В проектировании функций сопоставления шаблонов C# предполагается, что тип экземпляра массива, возвращаемого исходным массивом RuntimeHelpers.GetSubArray<T>(T[], Range) . Предыдущее поведение привело к неожиданному поведению определенных сложных выражений шаблонов, которые использовали срезы массивов ковариантных массивов. Дополнительные сведения см. в статье dotnet/roslyn#69053.
Рекомендуемое действие
Рекомендуемое действие — удалить зависимость затронутого кода от ковариации массива.
Например, измените:
object[] arr = new string[1];
M(arr[1..2]);
на:
string[] arr = new string[1];
M(arr[1..2]);
Затронутые API
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по