次の方法で共有


null 許容参照型の注釈の変更

.NET 6 では、.NET ライブラリ内のいくつかの null 許容注釈が変更されました。

変更の説明

以前のバージョンの .NET では、null 許容参照型の注釈の一部が誤っており、ビルド警告が欠落しているか、誤っていることがあります。 .NET 6 以降では、以前に適用されていた一部の注釈が更新されました。 新しいビルド警告が生成され、影響を受ける API に対して正しくないビルド警告が生成されなくなります。

これらの変更の一部は、新しいビルド時の警告につながる可能性があるため、 重大 であると見なされます。 .NET 6 に移行する場合は、これらの API を参照するコードを更新する必要があります。

このページには、破壊的変更と見なされないその他の変更も記載されています。 更新された API を参照するコードは、不要になった演算子またはプラグマを削除することでメリットが得られる場合があります。

導入されたバージョン

6.0

破壊的変更の種類

この変更は ソースの互換性に影響を与える可能性があります。

変更の理由

.NET Core 3.0 以降では、null 許容注釈が .NET ライブラリに適用されました。 作業の最初から、これらの注釈の間違いが予想されていました。 フィードバックとさらなるテストにより、影響を受ける API の null 許容注釈は不正確であると判断されました。 更新された注釈は、API の null 許容コントラクトを正しく表します。

変更された null 許容コントラクトを反映するように、これらの API を呼び出すコードを更新します。

影響を受ける 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[]) 2 番目のパラメーター型は 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) 2 番目のパラメーター型は null 許容です 非破壊的
XStreamingElement(XName, Object[]) 2 番目のパラメーター型は 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>) 1 番目のパラメーター型は 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 パラメーターに追加されました 破壊的

こちらも参照ください