📖
.NET 6 でのAPI変更を眺めてみる
.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 構造体
- 日付のみを保持するDateOnly 構造体、時刻のみを保持するTimeOnly 構造体が追加されています。
ref: .NET 6:日付と時刻の構造
Array クラス
-
実行時に、配列に格納できる要素の最大数を取得できる静的プロパティMaxLength プロパティが追加されています。
-
多次元配列に対応したClear メソッドが追加されています。
Environment クラス
- exeファイルの場所を取得するProcessPath プロパティが追加されています。
Enum クラス
- ReadOnlySpanに対応したParse メソッド および TryParse メソッドが追加されています。
Math クラス
- nint, nuint型に対応したオーバーロードが追加されています。
- out引数ではなくValueTupleを返すDivRem メソッドのオーバーロードが追加されています。
- Sin,Cosを一度に行うSinCos(Double) メソッドが追加されています。
- 逆数(
1/x
)の近似値を求めるReciprocalEstimate メソッドが追加されています。Intrinsicsを使っているので速い場合があるらしいです。 - 平方根の逆数(
1/sqrt(x)
)の近似値を求めるMath.ReciprocalSqrtEstimate メソッドが追加されています。Intrinsicsを使っているので速い場合があるらしいです。
MemoryExtensions クラス
- 文字列(Span/ReadOnlySpan)を行毎に分割して列挙するEnumerateLines メソッドが追加されています。
-
SequenceEqual メソッドで
IEqualityComparer<T>
を指定できるオーバーロードが追加されています。 - TryWrite メソッドが文字列補間ハンドラーに対応しています。
String クラス
- String.Create メソッドに文字列補間ハンドラーに対応したオーバーロードが追加されています。
- 改行コードを統一させるReplaceLineEndings メソッドが追加されています。
System.Collections.Generic
PriorityQueue クラス
- 新たなコンテナとしてPriorityQueue<TElement,TPriority> クラスが追加されています。
ref: .NET 6: コレクションの改良
System.Diagnostics
Debug クラス
-
Assert メソッド, WriteIf メソッド, WriteLineIf メソッド で
文字列補間ハンドラーに対応しています。
StackTraceHidden 属性
- 付与されたメソッドがスタックトレースから除外されるStackTraceHiddenAttribute クラスが追加されています。
以前はinternalだったようです。
System.Diagnostics.Metrics
統計を扱うAPIが新設されたようです。
ref: 計量的な統計を扱うためのSystem.Diagnostics.Metrics API - Qiita
System.Globalization
StringInfo クラス
- 書記素の長さを取得するGetNextTextElementLength メソッドが追加されています。
System.IO
シンボリックリンク対応
- FileSystemInfo,Directory,File クラスでシンボリックリンクを作成・解釈するメソッドが追加されています。
EnumerationOptions クラス
- 深さを制限できるMaxRecursionDepth プロパティが追加されています。地味に嬉しい。
FileStreamOptions クラス
- ファイルストリームを開く際のオプションのオーバーロードが大量にありましたが、
まとめて指定できるFileStreamOptions クラスが追加されています。
File クラス
- Streamを開かずにSafeFileHandleを取得できるFile.OpenHandle メソッドが追加されています。
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 クラス
- 2のべき乗かどうかを判定するIsPow2 メソッドが追加されています。
- 2のべき乗に切り上げるRoundUpToPowerOf2 メソッドが追加されています。
System.Reflection
NullabilityInfoContext クラス
- リフレクションクラスからNullabilityInfoを取得する NullabilityInfoContext クラスが追加されています。
System.Runtime.CompilerServices
- デフォルトの文字列補間ハンドラーであるDefaultInterpolatedStringHandler 構造体が追加されています。
- 関数ポインターのメタデータとして使用するCallConvMemberFunction クラス、CallConvSuppressGCTransition クラスが追加されています。
System.Runtime.InteropServices
CLong、CULong、NFloat 構造体
ネイティブ(C言語)側のlong
、unsigned long
、ネイティブ整数と同サイズの浮動小数点型 のサイズに合わせた数値型が追加されています。
NativeMemory クラス
- C言語の
malloc
,calloc
,realloc
,free
,_aligned_malloc
,_aligned_realloc
,_aligned_free
に対応したメソッドを提供するNativeMemory クラスが追加されています。
Architecture 列挙型
- S390x フィールドが追加されています。今後メインフレームで動くかもしれません。
CollectionsMarshal クラス
- キーに対応した値(無ければデフォルト値)への参照を取得するGetValueRefOrAddDefault<TKey,TValue>(Dictionary<TKey,TValue>, TKey, Boolean) メソッドが追加されています。
- キーに対応した値への参照を取得するGetValueRefOrNullRef<TKey,TValue>(Dictionary<TKey,TValue>, TKey) メソッドが追加されています。
ref: .NET 6: コレクションの改良
MemoryMarshal クラス
- NUL終端した文字列をReadOnlySpanとして扱うMemoryMarshal.CreateReadOnlySpanFromNullTerminated メソッド
PosixSignalRegistration クラス
- POSIXのシグナルハンドラーを登録する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 クラス
- CancellationTokenSourceを再利用するためのTryReset メソッドが追加されています。
PeriodicTimer クラス
- async/awaitフレンドリーなPeriodicTimer クラスが追加されています。
ref: .NET 6: スレッドの改善
System.Threading.Tasks
Parallel クラス
- ForEachの非同期であるForEachAsync メソッドが追加されています。
ref: .NET 6: スレッドの改善
Task クラス
-
WaitAsync メソッドが追加されています。Task<T>もあり。
ref: .NET 6:非同期の改善
Discussion