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.
Zalecana akcja
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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla