Изменения в заметках ссылочного типа, допускающих значения NULL
В .NET 6 некоторые заметки о допустимости значений NULL в библиотеках .NET были изменены.
Описание изменения
В предыдущих версиях .NET некоторые заметки ссылочного типа, допускающие значения NULL, не верны, а предупреждения сборки либо отсутствуют, либо неверны. Начиная с .NET 6, были обновлены некоторые заметки, которые применялись ранее. Будут созданы новые предупреждения сборки, а неправильные предупреждения сборки для затронутых API больше не будут создаваться.
Некоторые из этих изменений считаются критическими, поскольку они могут привести к появлению новых предупреждений во время сборки. При переходе на .NET 6 необходимо обновить код, который ссылается на такие API.
Другие изменения, которые не считаются критическими, также описаны на этой странице. Любой код, ссылающийся на обновленные API, может стать эффективнее за счет удаления операторов или прагм, которые больше не нужны.
Представленные версии
6,0
Тип критического изменения
Это изменение может повлиять на совместимость исходного кода.
Причина изменения
Начиная с .NET Core 3.0, к библиотекам .NET были применены заметки о допустимости значений NULL. С самого начала ожидались ошибки в этих заметках. Благодаря отзывам и дальнейшему тестированию заметки, допускающие значение NULL для затрагиваемых API, были определены как неточные. В обновленных заметках правильно представлены контракты допустимости значений NULL для API.
Рекомендуемое действие
Обновите код, в результате выполнения которого API отражают изменения в контрактах, допускающих значения NULL.
Затронутые API
Затронутые API перечислены в следующей таблице:
API | Изменения | Критическое или некритическое |
---|---|---|
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) | Тип параметра instance допускает значение NULL |
Некритическое |
System.ComponentModel.ISite.Container | Тип свойства допускает значение NULL | Критическое |
System.Xml.Linq.XContainer.Add(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XContainer.AddFirst(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) | Тип параметра допускает значение NULL | Некритическое |
XDocument(Object[]) | Тип параметра допускает значение NULL | Некритическое |
XDocument(XDeclaration, Object[]) | Тип параметра допускает значение NULL | Некритическое |
XElement(XName, Object[]) | Тип второго параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XElement.ReplaceAll(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XNode.AddAfterSelf(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XNode.ReplaceWith(Object[]) | Тип параметра допускает значение NULL | Некритическое |
XStreamingElement(XName, Object) | Тип второго параметра допускает значение NULL | Некритическое |
XStreamingElement(XName, Object[]) | Тип второго параметра допускает значение NULL | Некритическое |
System.Xml.Linq.XStreamingElement.Add(Object[]) | Тип параметра допускает значение NULL | Некритическое |
System.Xml.XmlDocument.XmlResolver | Метод задания принимает ссылку, допускаемую значение NULL | Критическое |
System.Net.Http.HttpClient.PatchAsync | Тип параметра content допускает значение NULL |
Некритическое |
System.Net.Http.HttpClient.PostAsync | Тип параметра content допускает значение NULL |
Некритическое |
System.Net.Http.HttpClient.PutAsync | Тип параметра content допускает значение NULL |
Некритическое |
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) | Тип первого параметра допускает значение NULL | Некритическое |
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) | Тип возвращаемого значения не допускает значение NULL | Некритическое |
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | Тип параметра buffer допускает значение NULL |
Критическое |
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | Тип параметра buffer допускает значение NULL |
Критическое |
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) | Тип параметра buffer допускает значение NULL |
Критическое |
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) | Тип параметра buffer допускает значение NULL |
Критическое |
System.Net.HttpListenerContext.AcceptWebSocketAsync | Тип параметра subProtocol допускает значение NULL |
Некритическое |
Методы, переопределяющие System.Object.Equals(Object), и многие другие , возвращающиеbool |
Значение [NotNullWhen(true)] добавлено к первому параметру, допускающему значение NULL |
Критическое |
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Collections.Specialized.BitVector32.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру o . |
Критическое |
System.Collections.Specialized.BitVector32.Section.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру o . |
Критическое |
System.Reflection.Metadata.BlobContentId.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.BlobHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.EntityHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.GuidHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.Handle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.SequencePoint.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.SignatureHeader.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Emit.Label.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.Reflection.Emit.OpCode.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |
System.DateOnly.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру value . |
Критическое |
System.TimeOnly.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру value . |
Критическое |
System.Reflection.Pointer.Equals(Object) | Значение NotNullWhen(true) было добавлено к параметру obj . |
Критическое |