BrotliStream 不再允许未定义的 CompressionLevel 值
采用 CompressionLevel 参数的 BrotliStream 构造函数不再允许 CompressionLevel 枚举中未定义的值。 如果传递了无效值,会引发 ArgumentException。
旧行为
在过去,BrotliStream 允许通过直接将所需级别强制转换为 CompressionLevel 来将任意压缩级别传递给构造函数。 例如:
BrotliStream brotli = new BrotliStream(baseStream,
(CompressionLevel)5); // Use level 5
但是,如果提供了任意级别,则会按原样传递到基础库,从而导致不一致和潜在的意外行为。
新行为
BrotliStream 仅允许 CompressionLevel 中已定义的值。 如果将未定义的值传递给构造函数,会引发 ArgumentException。
引入的版本
.NET 7
中断性变更的类型
此项更改可能会影响二进制兼容性。
更改原因
CompressionLevel 枚举的目的是让开发人员使用压缩算法,而无需了解其优化参数的含义。
如果提供了任意级别,则会按原样传递到基础库,从而导致不一致和潜在的意外行为。 通过此更改,行为与其他压缩流(例如 DeflateStream)保持一致。
通过对 CompressionLevel 值进行新的优化并添加 CompressionLevel.SmallestSize,现可在压缩算法中进行各种权衡。 用户可继续依赖 CompressionLevel 值作为此类权衡的抽象。
建议的操作
如果你依赖于将未定义的值作为 CompressionLevel 传递,请重新访问你的用例,并确定已记录的哪个值最适合该用例。