Condividi tramite


Modifiche alle annotazioni del tipo riferimento nullable

In .NET 6 alcune annotazioni di supporto dei valori Null nelle librerie .NET sono state modificate.

Descrizione delle modifiche

Nelle versioni precedenti di .NET, alcune annotazioni del tipo riferimento nullable non sono corrette e gli avvisi di compilazione sono errati o assenti. 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 errati per le API interessate.

Alcune di queste modifiche vengono considerate in grado di causare un'interruzione, perché possono generare 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 non considerate in grado di causare un'interruzione. Il codice che fa riferimento alle API aggiornate può trarre vantaggio dalla rimozione di operatori o pragma non più necessari.

Versione introdotta

6.0

Tipo di modifica che causa un'interruzione

Questa modifica può influire sulla compatibilità dell'origine.

Motivo della modifica

A partire da .NET Core 3.0, alle librerie .NET sono state applicate annotazioni di supporto dei valori Null. Sin dal principio, erano previsti errori in queste annotazioni. Grazie al feedback e a ulteriori test, si è determinato che le annotazioni di supporto dei valori Null per le API interessate sono imprecise. Le annotazioni aggiornate rappresentano correttamente i contratti di supporto dei valori Null per le API.

Aggiornare il codice che chiama queste API in modo da riflettere i contratti di supporto dei valori Null modificati.

API interessate

La tabella seguente contiene l'elenco delle API interessate:

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

Vedi anche