可為 Null 的參考型別註解變更

在 .NET 6 中,.NET 程式庫中的一些可 Null 性註釋已變更。

變更描述

在舊版 .NET 中,某些可為 Null 的參考型別註解不正確,而且組建警告不存在或不正確。 從 .NET 6 開始,已更新先前套用的一些註釋。 受影響的 API 會產生新的組建警告,不再產生不正確的組建警告。

其中有些變更屬於「中斷」變更,因為可能會導致新的建置階段警告。 當您移轉至 .NET 6 時,必須更新參考這些 API 的程式碼。

此頁面也記錄了未被視為中斷性變更的其他變更。 移除不再有必要的運算子和程式,對於參考已更新之 API 的任何程式碼都有幫助。

導入的版本

6.0

中斷性變更的類型

此變更可能會影響來源相容性

變更原因

可 Null 性註釋從 .NET Core 3.0 開始套用至 .NET 程式庫。 這些註釋中的錯誤,原本就在預期之中。 我們透過意見反應和進一步測試,判斷受影響 API 的可為 Null 註釋並不正確。 更新的註釋現在會正確代表 API 的可 NULL 性合約。

更新呼叫這些 API 的程式碼,以反映修訂的可 NULL 性合約。

受影響的 API

下表列出受影響的 API:

API 變更內容 中斷或不中斷
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) instance 參數類型可為 Null 不中斷
System.ComponentModel.ISite.Container 屬性類型可為 Null 中斷
System.Xml.Linq.XContainer.Add(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XContainer.AddFirst(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) 參數類型可為 Null 不中斷
XDocument(Object[]) 參數類型可為 Null 不中斷
XDocument(XDeclaration, Object[]) 參數類型可為 Null 不中斷
XElement(XName, Object[]) 第二個參數類型可為 Null 不中斷
System.Xml.Linq.XElement.ReplaceAll(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XNode.AddAfterSelf(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) 參數類型可為 Null 不中斷
System.Xml.Linq.XNode.ReplaceWith(Object[]) 參數類型可為 Null 不中斷
XStreamingElement(XName, Object) 第二個參數類型可為 Null 不中斷
XStreamingElement(XName, Object[]) 第二個參數類型可為 Null 不中斷
System.Xml.Linq.XStreamingElement.Add(Object[]) 參數類型可為 Null 不中斷
System.Xml.XmlDocument.XmlResolver setter 接受可為 Null 的參考 中斷
System.Net.Http.HttpClient.PatchAsync content 參數類型可為 Null 不中斷
System.Net.Http.HttpClient.PostAsync content 參數類型可為 Null 不中斷
System.Net.Http.HttpClient.PutAsync content 參數類型可為 Null 不中斷
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) 第一個參數類型可為 Null 不中斷
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) 傳回型別不可為 Null 不中斷
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer 參數類型可為 Null 中斷
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer 參數類型可為 Null 中斷
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer 參數類型可為 Null 中斷
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer 參數類型可為 Null 中斷
System.Net.HttpListenerContext.AcceptWebSocketAsync subProtocol 參數類型可為 Null 不中斷
覆寫 System.Object.Equals(Object) 的方法,以及傳回 bool 的其他許多方法 [NotNullWhen(true)] 新增至第一個可為 Null 的參數 中斷
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true) 已新增至 o 參數 中斷
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true) 已新增至 o 參數 中斷
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷
System.DateOnly.Equals(Object) NotNullWhen(true) 已新增至 value 參數 中斷
System.TimeOnly.Equals(Object) NotNullWhen(true) 已新增至 value 參數 中斷
System.Reflection.Pointer.Equals(Object) NotNullWhen(true) 已新增至 obj 參數 中斷

另請參閱