Modification des annotations de type référence Nullable

Dans .NET 6, certaines annotations de nullabilité dans les bibliothèques .NET ont changé.

Description de la modification

Dans les versions précédentes de .NET, certaines annotations de type référence Nullable étaient incorrectes. Les avertissements de build étaient absents ou incorrects. À compter de .NET 6, certaines annotations appliquées précédemment ont été mises à jour. De nouveaux avertissements de build sont émis. Les avertissements de build incorrects ne sont plus générés pour les API concernées.

Certains de ces changements sont considérés comme cassants, car ils peuvent donner lieu à de nouveaux avertissements au moment de la génération. Lorsque vous migrez vers .NET 6, vous devez mettre à jour le code qui fait référence à ces API.

D’autres changements non considérés comme cassants sont également documentés sur cette page. Tout code faisant référence aux API mises à jour peut tirer parti de la suppression d’opérateurs ou de pragmas qui ne sont plus nécessaires.

Version introduite

6.0

Type de changement cassant

Ce changement peut affecter la compatibilité source.

Raison du changement

À compter de .NET Core 3.0, les annotations de nullabilité ont été appliquées aux bibliothèques .NET. Dès le début de cet effort, des erreurs étaient attendues dans ces annotations. Grâce aux commentaires et à de nouveaux tests, les annotations Nullables des API concernées ont été jugées inexactes. Les annotations mises à jour représentent correctement les contrats de nullabilité pour les API.

Mettez à jour le code qui appelle ces API de façon à refléter les contrats de nullabilité révisés.

API affectées

Le tableau suivant présente les API concernées :

API Ce qui a changé Cassant ou non
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) Le type de paramètre instance est Nullable. Non cassant
System.ComponentModel.ISite.Container Le type de propriété est Nullable. Rupture
System.Xml.Linq.XContainer.Add(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XContainer.AddFirst(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) Le type de paramètre est Nullable. Non cassant
XDocument(Object[]) Le type de paramètre est Nullable. Non cassant
XDocument(XDeclaration, Object[]) Le type de paramètre est Nullable. Non cassant
XElement(XName, Object[]) Le type du deuxième paramètre est Nullable. Non cassant
System.Xml.Linq.XElement.ReplaceAll(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XNode.AddAfterSelf(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.Linq.XNode.ReplaceWith(Object[]) Le type de paramètre est Nullable. Non cassant
XStreamingElement(XName, Object) Le type du deuxième paramètre est Nullable. Non cassant
XStreamingElement(XName, Object[]) Le type du deuxième paramètre est Nullable. Non cassant
System.Xml.Linq.XStreamingElement.Add(Object[]) Le type de paramètre est Nullable. Non cassant
System.Xml.XmlDocument.XmlResolver Le setter accepte une référence pouvant accepter une référence null Rupture
System.Net.Http.HttpClient.PatchAsync Le type de paramètre content est Nullable. Non cassant
System.Net.Http.HttpClient.PostAsync Le type de paramètre content est Nullable. Non cassant
System.Net.Http.HttpClient.PutAsync Le type de paramètre content est Nullable. Non cassant
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) Le type du premier paramètre est Nullable. Non cassant
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) Le type de retour n’est pas Nullable. Non cassant
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) Le type de paramètre buffer est Nullable. Rupture
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) Le type de paramètre buffer est Nullable. Rupture
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) Le type de paramètre buffer est Nullable. Rupture
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) Le type de paramètre buffer est Nullable. Rupture
System.Net.HttpListenerContext.AcceptWebSocketAsync Le type de paramètre subProtocol est Nullable. Non cassant
Méthodes qui remplacent System.Object.Equals(Object) et nombreuses méthodes qui retournent un bool [NotNullWhen(true)] est ajouté au premier paramètre Nullable. Rupture
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true) est ajouté au paramètre o. Rupture
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true) est ajouté au paramètre o. Rupture
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture
System.DateOnly.Equals(Object) NotNullWhen(true) est ajouté au paramètre value. Rupture
System.TimeOnly.Equals(Object) NotNullWhen(true) est ajouté au paramètre value. Rupture
System.Reflection.Pointer.Equals(Object) NotNullWhen(true) est ajouté au paramètre obj. Rupture

Voir aussi