次の方法で共有


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 値の許容コントラクトが正しく表現されています。

これらの 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[]) 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 許容に 非破壊的
と、[`bool` を返すその他のもの](https://github.com/dotnet/runtime/pull/47598/files)をオーバーライドするメソッド `[NotNullWhen(true)]` が最初の null 許容パラメーターに追加されました あり
System.Collections.Immutable.ImmutableArray<T>.Equals(Object) `NotNullWhen(true)``obj` パラメーターに追加されました あり
System.Collections.Specialized.BitVector32.Equals(Object) `NotNullWhen(true)``obj` パラメーターに追加されました あり
System.Collections.Specialized.BitVector32.Section.Equals(Object) `NotNullWhen(true)``obj` パラメーターに追加されました あり
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)``obj` パラメーターに追加されました あり
System.TimeOnly.Equals(Object) `NotNullWhen(true)``obj` パラメーターに追加されました あり
System.Reflection.Pointer.Equals(Object) `NotNullWhen(true)``obj` パラメーターに追加されました あり

関連項目

  • [null 状態のスタティック分析の属性](../../../../csharp/language-reference/attributes/nullable-analysis.md)
  • [ASP.NET Core での null 許容参照型の注釈の変更](../../aspnet-core/6.0/nullable-reference-type-annotations-changed.md)