てくメモ

trivial な notes

2023-11-01から1ヶ月間の記事一覧

【C#】FakeTimeProvider と FakeLogger を試す

C#

.NET 8 の目玉のひとつに時間抽象化があり、それを利用したFakeTimeProviderが提供された。 (.NET 8~) また、同様に Fake を冠するロガーとして、FakeLoggerが提供された。 (.NET 8~) FakeTimeProvider クラス (Microsoft.Extensions.Time.Testing) | Micr…

【C#】OrderBy(_ => Guid.NewGuid())

C#

.NET 8 で標準のシャッフルが用意されたということで、OrderBy(_ => Guid.NewGuid())との差を確認しておいてみる。 念のため触れておくと、OrderBy(_ => Guid.NewGuid())は、本来ソートに使うメソッドに本来Guidとして生成する数値を渡し、シャッフルとして…

【C#】.NET 8 で Random クラスに追加された Shuffle と GetItems の中身の確認

C#

.NET 8で追加されたRandom.ShuffleメソッドとRandom.GetItemsメソッドの中身を確認しておく。(.NET 8.0 リリース時点) 前者はシャッフル、後者は選択肢の中からランダムに選ぶ(よその名前では choice とか sample とか)もの。 なお、System.Security.Cry…

【C#】コレクション式 : 独自型でコレクション式を使ってみる (CollectionBuilder 属性)

C#

C# 12 で導入されたコレクション式は、CollectionBuilderAttributeを用いることで、独自型にも導入できる。 公式ドキュメント ・コレクション式 (コレクション リテラル) - C# | Microsoft Learn ・CollectionBuilderAttribute クラス (System.Runtime.Compi…

【C#】コレクション式 : ILを見てどういう中身か掴む(Span, ReadOnlySpan, 配列, List)

C#

C# 12 で導入されたコレクション式について、従来型の記述などとILを簡単に見比べておくもの。(.NET 8.0 リリース時点、ILSpy使用) コレクション式についての参考リンク ・コレクション式 (コレクション リテラル) - C# | Microsoft Learn ・コレクション…

【C#】文字列から<T>型への汎用コンバート : IParseble<TSelf>

C#

IParsable<TSelf>というインターフェースがある。(.NET 7~) https://learn.microsoft.com/ja-jp/dotnet/api/system.iparsable-1?view=net-8.0 実装している型は、ParseメソッドとTryParseメソッドを持つ。 例えば以下のように使える。 public T ConvertByIParsab</tself>…

【C#】SearchValues<char> を測ったら桁違いに速かった

C#

Youtubeの動画みたいな記事タイトル。でも実際速い。 SearchValues<T>は .NET 8 から入った効率的な検索用に最適化された型。 SearchValues.Createメソッドから生成したSearchValues<T> (.NET 8.0 現在、Tはchar/byte) を、Span<T>.IndexOfAnyメソッドなどに渡して用</t></t></t>…

【C#】ReadOnlySpan<T>最適化の確認

C#

以前、最適化によりbyte[], sbyte[]がゼロアロケーションとなる場合を確認した。 【C#】ゼロアロケーションバイト列 - てくメモ これについて、現在1は対象が拡大している。 参考 ・コレクション式 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C …