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

byte[]をstringへ高速に変換する

C#

生のバイト配列を文字列に変換したい場面は割とある。ログを残したいときとか。いくつもの方法があるようだが、単純に変換した場合と速度にこだわった実装とでどれくらいの差があるのか実際に確かめてみた。 Method Mean Error StdDev Gen 0/1k Op Gen 1/1k …

文字列挿入($"")でInvariantCultureを指定する

C#

多言語対応のアプリケーションを開発している場合に気を配らなければならないのが.ToString()などによる文字列変換時のカルチャ指定。例えば小数点はピリオドで桁区切りはカンマと思いきや、国によっては逆だったりするので要注意だ。パース時のカルチャ指定…

BinaryFormatterによる深いコピーと深い同値性判定

C#

BinaryFormatterによってあるオブジェクトのグラフ全体をバイト配列にシリアライズできることを利用して、深いコピーと深い同値性判定を実装できる。ただし対象の型には[Serializable]属性を付けておく必要がある。 例えばある状態のオブジェクトを生成する…

BinaryFormatter.Deserialize() ではコンストラクタが呼ばれない

C#

以下のコードを実行すると、デシリアライズの際にはコンストラクタを通らないことが確認できた。新たなオブジェクトを生成しているのにコンストラクタを通らないなんて! だからこそ、getterのみのプロパティも復元できてしまうのだろう。JsonConvertではこ…

resxで定義された言語リソースの値をそのキー名で実行時に差し替える

C#

resxファイルで定義された言語リソースをアプリケーションの各所で表示するが、実際に画面に表示されているのがどのキーの言語リソースなのか確認したい時がある。例えば、言語リソースの量が膨大で同じ値のキーが複数あったり、あるいは2つのキーの値が日本…