Änderungen an Anmerkungen für Nullable-Verweistypen

In .NET 6 wurde einige Anmerkungen für die NULL-Zulässigkeit in .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 der zuvor angewendeten Anmerkungen geändert. Es werden neue Buildwarnungen generiert, und die falschen Buildwarnungen werden für die betroffenen APIs nicht mehr generiert.

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 Sie Code anpassen, der auf diese APIs verweist.

Auch andere Änderungen, die jedoch nicht als Breaking Changes gelten, sind auf dieser Seite dokumentiert. Sie sollten nicht mehr benötigte Operatoren und Pragmas aus Code entfernen, der auf die aktualisierten APIs verweist.

Eingeführt in Version

6.0

Typ des Breaking Changes

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

Grund für die Änderung

Ab .NET Core 3.0 wurden Anmerkungen für die NULL-Zulässigkeit auf .NET-Bibliotheken angewendet. Schon zu Beginn 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 jetzt die korrekte NULL-Zulässigkeit für diese APIs dar.

Aktualisieren Sie Code, der diese APIs aufruft, damit dieser die überarbeitete NULL-Zulässigkeit berücksichtigt.

Betroffene APIs

Die betroffenen APIs werden in der folgenden Tabelle aufgeführt:

API Änderung Betroffen/Nicht betroffen
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) Parametertyp instance lässt NULL-Werte zu Nicht betroffen
System.ComponentModel.ISite.Container Eigenschaftentyp lässt NULL-Werte zu Breaking
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[]) Zweiter Parametertyp lässt NULL-Werte zu 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) Zweiter Parametertyp lässt NULL-Werte zu Nicht betroffen
XStreamingElement(XName, Object[]) Zweiter Parametertyp lässt NULL-Werte zu 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. Breaking
System.Net.Http.HttpClient.PatchAsync Parametertyp content lässt NULL-Werte zu Nicht betroffen
System.Net.Http.HttpClient.PostAsync Parametertyp content lässt NULL-Werte zu Nicht betroffen
System.Net.Http.HttpClient.PutAsync Parametertyp content lässt NULL-Werte zu Nicht betroffen
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) Erster Parametertyp lässt NULL-Werte zu 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) Parametertyp buffer lässt NULL-Werte zu Breaking
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) Parametertyp buffer lässt NULL-Werte zu Breaking
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) Parametertyp buffer lässt NULL-Werte zu Breaking
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) Parametertyp buffer lässt NULL-Werte zu Breaking
System.Net.HttpListenerContext.AcceptWebSocketAsync Parametertyp subProtocol lässt NULL-Werte zu Nicht betroffen
Methoden, die System.Object.Equals(Object) außer Kraft setzen und viele andere, die bool zurückgeben [NotNullWhen(true)] wurde zum ersten Parameter hinzugefügt, der Nullwerte zulässt Breaking
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true) wurde dem Parameter o hinzugefügt Breaking
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true) wurde dem Parameter o hinzugefügt Breaking
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking
System.DateOnly.Equals(Object) NotNullWhen(true) wurde dem Parameter value hinzugefügt Breaking
System.TimeOnly.Equals(Object) NotNullWhen(true) wurde dem Parameter value hinzugefügt Breaking
System.Reflection.Pointer.Equals(Object) NotNullWhen(true) wurde dem Parameter obj hinzugefügt Breaking

Siehe auch