Condividi tramite


Modifiche alle annotazioni di tipo riferimento nullable

In .NET 6 alcune annotazioni di nullità nelle librerie .NET sono state modificate.

Descrizione delle modifiche

Nelle versioni precedenti di .NET alcune annotazioni di tipo riferimento nullable non sono corrette e gli avvisi di compilazione sono assenti o non corretti. A partire da .NET 6, alcune annotazioni applicate in precedenza sono state aggiornate. Verranno generati nuovi avvisi di compilazione e non verranno più generati avvisi di compilazione non corretti per le API interessate.

Alcune di queste modifiche vengono considerate di rilievo perché possono causare nuovi avvisi in fase di compilazione. Quando si esegue la migrazione a .NET 6, è necessario aggiornare il codice che fa riferimento a queste API.

In questa pagina sono documentate anche altre modifiche che non sono considerate di rilievo. Qualsiasi codice che fa riferimento alle API aggiornate può trarre vantaggio dalla rimozione di operatori o pragmas non più necessari.

Versione introdotta

6.0

Tipo di cambiamento che interrompe la compatibilità

Questa modifica può influire sulla compatibilità del codice sorgente .

Motivo della modifica

A partire da .NET Core 3.0, le annotazioni di annullabilità sono state applicate alle librerie .NET. Sin dall'inizio dello sforzo, gli errori in queste annotazioni sono stati previsti. Tramite feedback e ulteriori test, le annotazioni nullable per le API interessate sono risultate imprecise. Le annotazioni aggiornate rappresentano correttamente i contratti di nullità per le API.

Aggiornare il codice che chiama queste API per riflettere i contratti di nullità modificati.

Le API interessate

La tabella seguente elenca le API interessate:

API (Interfaccia di Programmazione delle Applicazioni) Cosa è cambiato Causa o non causa un'interruzione
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) instance il tipo di parametro è annullabile Ininterrotto
System.ComponentModel.ISite.Container Il tipo di proprietà può essere nullo Ultime notizie
System.Xml.Linq.XContainer.Add(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XContainer.AddFirst(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) Il tipo di parametro è annullabile Ininterrotto
XDocument(Object[]) Il tipo di parametro è annullabile Ininterrotto
XDocument(XDeclaration, Object[]) Il tipo di parametro è annullabile Ininterrotto
XElement(XName, Object[]) Il secondo tipo di parametro può essere nullo Ininterrotto
System.Xml.Linq.XElement.ReplaceAll(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XNode.AddAfterSelf(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.Linq.XNode.ReplaceWith(Object[]) Il tipo di parametro è annullabile Ininterrotto
XStreamingElement(XName, Object) Il secondo tipo di parametro può essere nullo Ininterrotto
XStreamingElement(XName, Object[]) Il secondo tipo di parametro può essere nullo Ininterrotto
System.Xml.Linq.XStreamingElement.Add(Object[]) Il tipo di parametro è annullabile Ininterrotto
System.Xml.XmlDocument.XmlResolver Il setter accetta un riferimento annullabile Ultime notizie
System.Net.Http.HttpClient.PatchAsync content il tipo di parametro è annullabile Ininterrotto
System.Net.Http.HttpClient.PostAsync content il tipo di parametro è annullabile Ininterrotto
System.Net.Http.HttpClient.PutAsync content il tipo di parametro è annullabile Ininterrotto
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) Il primo tipo di parametro ammette valori nulli Ininterrotto
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) Il tipo restituito non può essere nullo Ininterrotto
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer il tipo di parametro è annullabile Ultime notizie
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer il tipo di parametro è annullabile Ultime notizie
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer il tipo di parametro è annullabile Ultime notizie
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer il tipo di parametro è annullabile Ultime notizie
System.Net.HttpListenerContext.AcceptWebSocketAsync subProtocol il tipo di parametro è annullabile Ininterrotto
Metodi che eseguono l'override System.Object.Equals(Object) e molti altri che restituiscono bool [NotNullWhen(true)] aggiunto al primo parametro nullable Ultime notizie
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true) è stato aggiunto al o parametro Ultime notizie
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true) è stato aggiunto al o parametro Ultime notizie
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie
System.DateOnly.Equals(Object) NotNullWhen(true) è stato aggiunto al value parametro Ultime notizie
System.TimeOnly.Equals(Object) NotNullWhen(true) è stato aggiunto al value parametro Ultime notizie
System.Reflection.Pointer.Equals(Object) NotNullWhen(true) è stato aggiunto al obj parametro Ultime notizie

Vedere anche