Udostępnij za pośrednictwem


Zmiany adnotacji typu odwołania dopuszczanego do wartości null

W programie .NET 6 niektóre adnotacje o wartości null w bibliotekach platformy .NET uległy zmianie.

Opis zmiany

W poprzednich wersjach platformy .NET niektóre adnotacje typu odwołania dopuszczające wartość null są nieprawidłowe, a ostrzeżenia kompilacji są nieobecne lub nieprawidłowe. Począwszy od platformy .NET 6, zaktualizowano niektóre adnotacje, które zostały wcześniej zastosowane. Nowe ostrzeżenia kompilacji zostaną wygenerowane i dla interfejsów API, których dotyczy problem, nie będą już generowane nieprawidłowe ostrzeżenia kompilacji.

Niektóre z tych zmian są uważane za powodujące niezgodność , ponieważ mogą prowadzić do nowych ostrzeżeń dotyczących czasu kompilacji. Podczas migracji do platformy .NET 6 należy zaktualizować kod odwołujący się do tych interfejsów API.

Inne zmiany, które nie są uważane za powodujące niezgodność, są również udokumentowane na tej stronie. Każdy kod, który odwołuje się do zaktualizowanych interfejsów API, może korzystać z usuwania operatorów lub pragma, które nie są już niezbędne.

Wprowadzona wersja

6.0

Typ zmiany powodującej niezgodność

Ta zmiana może mieć wpływ na zgodność źródła.

Przyczyna wprowadzenia zmiany

Począwszy od platformy .NET Core 3.0, adnotacje o wartości null zostały zastosowane do bibliotek platformy .NET. Od samego początku wysiłku przewidywano błędy w tych adnotacjach. W ramach opinii i dalszych testów adnotacje dopuszczane do wartości null dla dotkniętych interfejsów API zostały uznane za niedokładne. Zaktualizowane adnotacje poprawnie reprezentują kontrakty dopuszczalności dla interfejsów API.

Zaktualizuj kod wywołujący te interfejsy API w celu odzwierciedlenia poprawionych kontraktów dopuszczających wartość null.

Dotyczy interfejsów API

W poniższej tabeli wymieniono objęte interfejsy API:

interfejs API Co się zmieniło Niezgodność lub niezgodność
System.ComponentModel.DataAnnotations.AssociatedMetadataTypeTypeDescriptionProvider.GetTypeDescriptor(Type, Object) instance Typ parametru jest dopuszczany do wartości null Nierozdzielający
System.ComponentModel.ISite.Container Typ właściwości ma wartość null Kluczowa
System.Xml.Linq.XContainer.Add(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XContainer.AddFirst(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XContainer.ReplaceNodes(Object[]) Typ parametru ma wartość null Nierozdzielający
XDocument(Object[]) Typ parametru ma wartość null Nierozdzielający
XDocument(XDeclaration, Object[]) Typ parametru ma wartość null Nierozdzielający
XElement(XName, Object[]) Drugi typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XElement.ReplaceAll(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XElement.ReplaceAttributes(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XNode.AddAfterSelf(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XNode.AddBeforeSelf(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XNode.ReplaceWith(Object[]) Typ parametru ma wartość null Nierozdzielający
XStreamingElement(XName, Object) Drugi typ parametru ma wartość null Nierozdzielający
XStreamingElement(XName, Object[]) Drugi typ parametru ma wartość null Nierozdzielający
System.Xml.Linq.XStreamingElement.Add(Object[]) Typ parametru ma wartość null Nierozdzielający
System.Xml.XmlDocument.XmlResolver Ustawiacz akceptuje odwołanie dopuszczane do wartości null Kluczowa
System.Net.Http.HttpClient.PatchAsync content Typ parametru jest dopuszczany do wartości null Nierozdzielający
System.Net.Http.HttpClient.PostAsync content Typ parametru jest dopuszczany do wartości null Nierozdzielający
System.Net.Http.HttpClient.PutAsync content Typ parametru jest dopuszczany do wartości null Nierozdzielający
System.Linq.Expressions.MethodCallExpression.Update(Expression, IEnumerable<Expression>) Pierwszy typ parametru jest dopuszczany do wartości null Nierozdzielający
System.Linq.Expressions.Expression<TDelegate>.Update(Expression, IEnumerable<ParameterExpression>) Zwracany typ nie może zawierać wartości null Nierozdzielający
System.Data.IDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer Typ parametru jest dopuszczany do wartości null Kluczowa
System.Data.IDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer Typ parametru jest dopuszczany do wartości null Kluczowa
System.Data.Common.DbDataRecord.GetBytes(Int32, Int64, Byte[], Int32, Int32) buffer Typ parametru jest dopuszczany do wartości null Kluczowa
System.Data.Common.DbDataRecord.GetChars(Int32, Int64, Char[], Int32, Int32) buffer Typ parametru jest dopuszczany do wartości null Kluczowa
System.Net.HttpListenerContext.AcceptWebSocketAsync subProtocol Typ parametru jest dopuszczany do wartości null Nierozdzielający
Metody, które zastępują System.Object.Equals(Object) i wiele innych, które zwracają bool [NotNullWhen(true)] dodano do pierwszego parametru dopuszczalnego wartości null Kluczowa
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Collections.Specialized.BitVector32.Equals(Object) NotNullWhen(true)został dodany do parametru o Kluczowa
System.Collections.Specialized.BitVector32.Section.Equals(Object) NotNullWhen(true)został dodany do parametru o Kluczowa
System.Reflection.Metadata.BlobContentId.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.BlobHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.CustomDebugInformationHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.DocumentNameBlobHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.EntityHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.GuidHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.Handle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.ImportScopeHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.LocalConstantHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.NamespaceDefinitionHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.SequencePoint.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.SignatureHeader.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.Ecma335.EditAndContinueLogEntry.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Metadata.Ecma335.LabelHandle.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Emit.Label.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.Reflection.Emit.OpCode.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa
System.DateOnly.Equals(Object) NotNullWhen(true)został dodany do parametru value Kluczowa
System.TimeOnly.Equals(Object) NotNullWhen(true)został dodany do parametru value Kluczowa
System.Reflection.Pointer.Equals(Object) NotNullWhen(true)został dodany do parametru obj Kluczowa

Zobacz też