リストをn個ずつのリストに分割する

[a, b, c, d, e, f, g, h]というリストを3個ずつに分割して、最後の要素は3個以下の[a, b, c], [d, e, f], [g, h]というリストを得たいとする。そのときC#でどう書くかという質問の答えとして人気があるのが、以下のLINQである。

"リストをn個ずつのリストに分割する" の続きを読む

dotnet formatコマンドをStyleCop.Analyzersと組み合わせて使う

この記事では、dotnet formatコマンドを使ってC# Coding Styleにそってソースコードをフォーマットする方法と、その限界を説明する。そして、StyleCop.Analyzersを導入して、それを克服する方法を紹介する。また、ソリューション内のすべてのプロジェクトに、StyleCop.Analyzersを適用する方法についても言及する。

"dotnet formatコマンドをStyleCop.Analyzersと組み合わせて使う" の続きを読む

システムトレイアプリケーションをWPFとMVVMで実装する

この記事では、WPFとMVVMとによるシステムトレイアプリケーションの一実装について解説する。ソースコード全体はGitHubリポジトリにある。

この実装は二つの特徴がある。まず、よく使われているWPF NotifyIcon使っていない。ライセンスのCPOLが、どのOSSライセンスとも互換性がないからだ。また、MVVMパターンを採用していてコードビハインドがない。

"システムトレイアプリケーションをWPFとMVVMで実装する" の続きを読む

C#でロックフリーなメモリープールを自作する

基本的にシングルスレッドでしか使わないライブラリを、速度を落とさずにスレッドセーフにするために、ロックフリーなメモリープールを自作した話を紹介する。この記事はC# その2 Advent Calendar 2020の18日目の記事である。

"C#でロックフリーなメモリープールを自作する" の続きを読む

厳格なJSONパーザーの作り方

僕の作ったJSONパーザーのDynaJsonはとても厳格にできている。RFC 8259に準拠しているものはすべて受理するし、そうでないものは二つの例外を除きすべて受理しない。

受理する例外は、ケツカンマと02-02のような0で始まる数字である。前者を受理するのは実用性のためであり、後者を受理するのはDynamicJsonとの互換性のためである。

JSONの文法はとても単純だが、不用意にパーザーを実装するとRFCに準拠したJSONを受理しなかったり、非準拠のものをエラーにできなかったりする。パーザーを実装する際の地雷ポイントはParsing JSON is a Minefieldによくまとまっている。

"厳格なJSONパーザーの作り方" の続きを読む