Änderungen an Anmerkungen für Nullable-Verweistypen

In .NET 6 wurden einige Nullbarkeitsanmerkungen in den .NET-Bibliotheken geändert.

Änderungsbeschreibung

In vorherigen .NET-Versionen waren einige Anmerkungen für Nullable-Verweistypen nicht korrekt, und es wurden keine oder falsche Buildwarnungen ausgelöst. Ab .NET 6 wurden einige Anmerkungen aktualisiert, die zuvor angewendet wurden. Neue Buildwarnungen werden erstellt, und falsche Buildwarnungen werden für die betroffenen APIs nicht mehr erstellt.

Einige dieser Änderungen gelten als Breaking Changes, da sie zu neuen Warnungen zur Buildzeit führen können. Wenn Sie zu .NET 6 migrieren, müssen Code, der auf diese APIs verweist, aktualisiert werden.

Andere Änderungen, die nicht als Bruch angesehen werden, werden auch auf dieser Seite dokumentiert. Jeder Code, der auf die aktualisierten APIs verweist, kann davon profitieren, Operatoren oder Pragmen zu entfernen, die nicht mehr erforderlich sind.

Eingeführte Version

6,0

Art der einschneidenden Änderung

Diese Änderung kann sich auf die Quellkompatibilität auswirken.

Grund für Änderung

Ab .NET Core 3.0 wurden Nullbarkeitsanmerkungen auf die .NET-Bibliotheken angewendet. Von Anfang an wurden Fehler in diesen Anmerkungen erwartet. Durch Feedback und weitere Tests konnten die nicht korrekten Anmerkungen für die NULL-Zulässigkeit für die betroffenen APIs ermittelt werden. Die aktualisierten Anmerkungen stellen die Nullbarkeitsverträge für die APIs richtig dar.

Aktualisieren Sie Code, der diese APIs aufruft, um die überarbeiteten Nullbarkeitsverträge widerzuspiegeln.

Betroffene APIs

In der folgenden Tabelle sind die betroffenen APIs aufgeführt:

Programmierschnittstelle (API) Was sich geändert hat Betroffen/Nicht betroffen
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) instance Parametertyp ist nullwertebar Nicht betroffen
System.ComponentModel.ISite.Container Eigenschaftentyp lässt NULL-Werte zu Bruch
System.Xml.Linq.XContainer.Add(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XContainer.AddFirst(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
XDocument(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
XDocument(XDeclaration, Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
XElement(XName, Object[]) Der zweite Parametertyp ist nullable. Nicht betroffen
System.Xml.Linq.XElement.ReplaceAll(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XNode.AddAfterSelf(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.Linq.XNode.ReplaceWith(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
XStreamingElement(XName, Object) Der zweite Parametertyp ist nullable. Nicht betroffen
XStreamingElement(XName, Object[]) Der zweite Parametertyp ist nullable. Nicht betroffen
System.Xml.Linq.XStreamingElement.Add(Object[]) Parametertyp lässt NULL-Werte zu Nicht betroffen
System.Xml.XmlDocument.XmlResolver Der Setter akzeptiert einen Nullverweis. Bruch
System.Net.Http.HttpClient.PatchAsync content Parametertyp ist nullwertebar Nicht betroffen
System.Net.Http.HttpClient.PostAsync content Parametertyp ist nullwertebar Nicht betroffen
System.Net.Http.HttpClient.PutAsync content Parametertyp ist nullwertebar Nicht betroffen
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) Der Typ des ersten Parameters ist nullfähig Nicht betroffen
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) Rückgabetyp lässt keine NULL-Werte zu Nicht betroffen
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer Parametertyp ist nullwertebar Bruch
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer Parametertyp ist nullwertebar Bruch
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer Parametertyp ist nullwertebar Bruch
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer Parametertyp ist nullwertebar Bruch
System.Net.HttpListenerContext.AcceptWebSocketAsync subProtocol Parametertyp ist nullwertebar Nicht betroffen
Methoden, die System.Object.Equals(Object) überschreiben, und viele andere, die bool zurückgeben [NotNullWhen(true)] zum ersten nullablen Parameter hinzugefügt Bruch
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true) wurde dem o Parameter hinzugefügt. Bruch
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true) wurde dem o Parameter hinzugefügt. Bruch
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch
System.DateOnly.Equals(Object) NotNullWhen(true) wurde dem value Parameter hinzugefügt. Bruch
System.TimeOnly.Equals(Object) NotNullWhen(true) wurde dem value Parameter hinzugefügt. Bruch
System.Reflection.Pointer.Equals(Object) NotNullWhen(true) wurde dem obj Parameter hinzugefügt. Bruch

Siehe auch