Cambios en las anotaciones de tipos de referencia que aceptan valores NULL
En .NET 6, algunas anotaciones de nulabilidad de las bibliotecas de .NET han cambiado.
Descripción del cambio
En versiones anteriores de .NET, algunas anotaciones de tipos de referencia que aceptan valores NULL son incorrectas y las advertencias de compilación están ausentes o son incorrectas. A partir de .NET 6, se han actualizado algunas anotaciones aplicadas previamente. Se generarán nuevas advertencias de compilación y ya no se producirán advertencias de compilación incorrectas para las API afectadas.
Algunos de estos cambios se consideran importantes, ya que pueden dar lugar a nuevas advertencias en tiempo de compilación. Al realizar la migración a .NET 6, será necesario actualizar el código que hace referencia a estas API.
En esta página también se documentan otros cambios que no se consideran importantes. Cualquier código que haga referencia a las API actualizadas se puede beneficiar de la eliminación de operadores o pragmas que ya no sean necesarios.
Versión introducida
6.0
Tipo de cambio importante
Este cambio puede afectar a la compatibilidad de orígenes.
Motivo del cambio
A partir de .NET Core 3.0, se han aplicado anotaciones de nulabilidad a las bibliotecas de .NET. Desde el principio del esfuerzo, se esperaban errores en estas anotaciones. Gracias a comentarios y pruebas adicionales, se ha determinado que las anotaciones que aceptan valores NULL de las API afectadas eran inexactas. Las anotaciones actualizadas representan correctamente los contratos de nulabilidad de las API.
Acción recomendada
Actualice el código que llama a estas API para reflejar los contratos de nulabilidad revisados.
API afectadas
En la tabla siguiente se enumeran las API afectadas:
API | Qué cambia | Importante o no importante |
---|---|---|
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) | Tipo de parámetro instance que admite un valor NULL |
No importante |
System.ComponentModel.ISite.Container | Tipo de propiedad que admite un valor NULL | Problemático |
System.Xml.Linq.XContainer.Add(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XContainer.AddFirst(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
XDocument(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
XDocument(XDeclaration, Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
XElement(XName, Object[]) | Segundo tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XElement.ReplaceAll(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XNode.AddAfterSelf(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XNode.ReplaceWith(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
XStreamingElement(XName, Object) | Segundo tipo de parámetro que admite un valor NULL | No importante |
XStreamingElement(XName, Object[]) | Segundo tipo de parámetro que admite un valor NULL | No importante |
System.Xml.Linq.XStreamingElement.Add(Object[]) | Tipo de parámetro que admite un valor NULL | No importante |
System.Xml.XmlDocument.XmlResolver | El establecedor acepta una referencia nula | Problemático |
System.Net.Http.HttpClient.PatchAsync | Tipo de parámetro content que admite un valor NULL |
No importante |
System.Net.Http.HttpClient.PostAsync | Tipo de parámetro content que admite un valor NULL |
No importante |
System.Net.Http.HttpClient.PutAsync | Tipo de parámetro content que admite un valor NULL |
No importante |
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) | Primer tipo de parámetro que admite un valor NULL | No importante |
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) | Tipo de valor devuelto que no acepta un valor NULL | No importante |
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | Tipo de parámetro buffer que admite un valor NULL |
Problemático |
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | Tipo de parámetro buffer que admite un valor NULL |
Problemático |
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | Tipo de parámetro buffer que admite un valor NULL |
Problemático |
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | Tipo de parámetro buffer que admite un valor NULL |
Problemático |
System.Net.HttpListenerContext.AcceptWebSocketAsync | Tipo de parámetro subProtocol que admite un valor NULL |
No importante |
Métodos que invalidan System.Object.Equals(Object) y muchos otros que devuelven bool |
[NotNullWhen(true)] agregado al primer parámetro que admite un valor NULL |
Problemático |
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Collections.Specialized.BitVector32.Equals(Object) | NotNullWhen(true) se agregó al parámetro o |
Problemático |
System.Collections.Specialized.BitVector32.Section.Equals(Object) | NotNullWhen(true) se agregó al parámetro o |
Problemático |
System.Reflection.Metadata.BlobContentId.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.BlobHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.EntityHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.GuidHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.Handle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.SequencePoint.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.SignatureHeader.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Emit.Label.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.Reflection.Emit.OpCode.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
System.DateOnly.Equals(Object) | NotNullWhen(true) se agregó al parámetro value |
Problemático |
System.TimeOnly.Equals(Object) | NotNullWhen(true) se agregó al parámetro value |
Problemático |
System.Reflection.Pointer.Equals(Object) | NotNullWhen(true) se agregó al parámetro obj |
Problemático |
Vea también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de