FilePatternMatch.Stem 更改为不可为 null

FilePatternMatch.Stem 属性以前被批注为可为 null,因为它 PatternTestResult.Stem 从中获取其值的属性可以为 null。 PatternTestResult虽然如果结果不成功,则确实可以为 null,FilePatternMatch但从来不是因为它仅在成功时PatternTestResult构造。

为了准确反映可为 null 性,该 [MemberNotNullWhen()] 属性将应用于 PatternTestResult.Stem 该属性,告知编译器如果成功,该属性不会为 null。 此外,stem传入构造函数的参数FilePatternMatch不再可为 null,如果传入 nullArgumentNullException,将引发一个stem参数。

已引入的版本

.NET 10

以前的行为

以前,stem 构造函数接受用于stem 参数的 null,不会在编译时或运行时产生警告或错误。

// Allowed in previous versions.
var match = new FilePatternMatch("path/to/file.txt", null);

FilePatternMatch.Stem 属性也被批注为可为 null。

新行为

从 .NET 10 开始,将 a null 或可能为 null 值 stem 传递给构造函数中的 FilePatternMatch 参数将生成编译时警告。 如果传入 null,则会引发运行时 ArgumentNullException

现在,该FilePatternMatch.Stem属性已批注,指示如果为 IsSuccessfulnull,则该值不会为 nulltrue

// Generates compile-time warning.
var match = new FilePatternMatch("path/to/file.txt", null);

破坏性变更的类型

此更改可能会影响 源兼容性 ,并且是行为 更改

更改原因

以前的可为 null 性批注不准确,参数的值null是意外的,stem但无法正确防范。 此更改反映了 API 的预期行为,并防范不可预知的行为,同时生成有关使用情况的设计时指南。

如果为参数传入 stem 了可能为 null 的值,请查看使用情况并更新调用站点,以确保 stem 无法按原样 null分页。

如果在使用 FilePatternMatch.Stem 属性时应用了可为 null 性警告抑制,则可以删除这些抑制。

受影响的 API