📖

.NET 6 でのAPI変更を眺めてみる

2021/11/07に公開

.NET 6.0 API Changesを眺めた際に気になった部分をピックアップします。

気になる部分は人によって異なると思いますので、ぜひご自身で元のファイルをチェックしてみてください。
(Json関連のAPIが多く追加されていましたが、個人的には大して使用していないのでスキップしています。)

全体的に

Half構造体対応

  • .NET 5 で追加されたHalf構造体に対応したメソッドが全体的に追加されてます。
    • System.BitConverter
    • System.Buffers.Binary.BinaryPrimitives
    • System.IO.BinaryWriter
    • System.IO.BinaryReader

Streamの派生クラスでの引数名変更

  • Streamクラスに合うように、引数名が変わっています。
    引数名を指定している場合、地味な破壊的変更です。

System

ArgumentNullException クラス

  • 引数のnullチェックを簡略化するThrowIfNull()が追加されています。

ISpanFormattable インターフェイス対応

  • 以前はinternalだったISpanFormattable インターフェイスが公開され、各種データ型が実装しています。
    • System.Byte
    • System.Char
    • System.DateTime
    • System.DateTimeOffset
    • System.Decimal
    • System.Double
    • System.Guid
    • System.Half
    • System.Int16
    • System.Int32
    • System.Int64
    • System.IntPtr
    • System.SByte
    • System.Single
    • System.TimeSpan
    • System.UInt16
    • System.UInt32
    • System.UInt64
    • System.UIntPtr
    • System.Version
    • System.Numerics.BigInteger
    • System.Text.Rune

DateOnly 構造体、TimeOnly 構造体

Array クラス

  • 実行時に、配列に格納できる要素の最大数を取得できる静的プロパティMaxLength プロパティが追加されています。

  • 多次元配列に対応したClear メソッドが追加されています。

Environment クラス

Enum クラス

Math クラス

  • nint, nuint型に対応したオーバーロードが追加されています。
  • out引数ではなくValueTupleを返すDivRem メソッドのオーバーロードが追加されています。
  • Sin,Cosを一度に行うSinCos(Double) メソッドが追加されています。
  • 逆数(1/x)の近似値を求めるReciprocalEstimate メソッドが追加されています。Intrinsicsを使っているので速い場合があるらしいです。
  • 平方根の逆数(1/sqrt(x))の近似値を求めるMath.ReciprocalSqrtEstimate メソッドが追加されています。Intrinsicsを使っているので速い場合があるらしいです。

MemoryExtensions クラス

String クラス

System.Collections.Generic

PriorityQueue クラス

System.Diagnostics

Debug クラス

StackTraceHidden 属性

  • 付与されたメソッドがスタックトレースから除外されるStackTraceHiddenAttribute クラスが追加されています。
    以前はinternalだったようです。

System.Diagnostics.Metrics

統計を扱うAPIが新設されたようです。
ref: 計量的な統計を扱うためのSystem.Diagnostics.Metrics API - Qiita

System.Globalization

StringInfo クラス

System.IO

シンボリックリンク対応

  • FileSystemInfo,Directory,File クラスでシンボリックリンクを作成・解釈するメソッドが追加されています。

EnumerationOptions クラス

FileStreamOptions クラス

  • ファイルストリームを開く際のオプションのオーバーロードが大量にありましたが、
    まとめて指定できるFileStreamOptions クラスが追加されています。

File クラス

RandomAccess クラス

  • Streamを使わずに、SafeFileHandleに対してI/O操作を行うRandomAccess クラスが追加されています。

System.IO.Compression

ZLibStream クラス

  • zlib ストリームを扱うZLibStream クラスが追加されています。GZipStreamとは微妙に違うようです。

System.Linq

Enumerable クラス、Queryable クラス

  • Chunk、DistinctBy、ExceptBy、IntersectBy、UnionBy、MinBy、MaxByが追加されています。
    ref: .NET 6 LINQの改良
  • *OrDefaultメソッドでデフォルト値を指定できるようになっています。
  • Max、MinメソッドでIComparer<TSource>を指定できるようになっています。

System.Net.Sockets

  • Socket クラスにasync/Spanに対応したメソッドが多数追加されています。

System.Numerics

BitOperations クラス

System.Reflection

NullabilityInfoContext クラス

System.Runtime.CompilerServices

System.Runtime.InteropServices

CLong、CULong、NFloat 構造体

ネイティブ(C言語)側のlongunsigned long、ネイティブ整数と同サイズの浮動小数点型 のサイズに合わせた数値型が追加されています。

NativeMemory クラス

  • C言語のmalloc, calloc, realloc, free, _aligned_malloc, _aligned_realloc, _aligned_freeに対応したメソッドを提供するNativeMemory クラスが追加されています。

Architecture 列挙型

  • S390x フィールドが追加されています。今後メインフレームで動くかもしれません。

CollectionsMarshal クラス

MemoryMarshal クラス

PosixSignalRegistration クラス

System.Runtime.Intrinsics.X86

AvxVnni クラス

  • Intel 第10世代Core 以降で実装されているVNNIの為の
    AvxVnni クラスが追加されています。

System.Security.Cryptography

大量に追加されているので省略。
気が向いたら追記します。

System.Text

StringBuilder クラス

System.Text.RegularExpressions

Capture クラス

  • キャプチャした範囲を取得するValueSpan プロパティが追加されています。.NET Coreで無かったのが不思議です。
    派生型のMatch、Groupクラスでも使用できます。

System.Threading

CancellationTokenSource クラス

PeriodicTimer クラス

System.Threading.Tasks

Parallel クラス

Task クラス

Discussion