BrotliStream ya no permite valores CompressionLevel sin definir

Los constructores BrotliStream que toman un argumento CompressionLevel ya no permiten valores que no están definidos en la enumeración CompressionLevel. Si pasa un valor no válido, se produce una excepción ArgumentException.

Comportamiento anterior

BrotliStream le permitía pasar un nivel de compresión arbitrario al constructor, convirtiendo el nivel deseado directamente a CompressionLevel. Por ejemplo:

BrotliStream brotli = new BrotliStream(baseStream,
                                       (CompressionLevel)5); // Use level 5

Sin embargo, si se proporcionaba un nivel arbitrario, este se transmitía tal cual a la biblioteca subyacente, lo que provocaba un comportamiento incoherente y potencialmente inesperado.

Comportamiento nuevo

BrotliStream solo permite los valores definidos en CompressionLevel. Si pasa un valor indefinido al constructor, se produce una excepción ArgumentException.

Versión introducida

.NET 7

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

El propósito de la enumeración CompressionLevel es permitir que los desarrolladores usen algoritmos de compresión sin necesidad de comprender el significado de sus parámetros de optimización.

Si se proporcionaba un nivel arbitrario, este se transmitía tal cual a la biblioteca subyacente, lo que provocaba un comportamiento incoherente y potencialmente inesperado. Con este cambio, el comportamiento se alinea con otros flujos de compresión, por ejemplo, DeflateStream.

Con el nuevo ajuste de los valores CompressionLevel y la adición de CompressionLevel.SmallestSize, ahora es posible tener una variedad de compensaciones en los algoritmos de compresión. Los usuarios pueden seguir confiando en los valores CompressionLevel como abstracciones de dichas compensaciones.

Si confiaba en pasar valores indefinidos como CompressionLevel, revise su caso de uso y decida qué valor documentado es el más óptimo para él.

API afectadas