サロゲートペアとか
とあるJavaのコードをC#でリライトしてたのだが、UTF32(int)をUTF16(char)にカジュアルにキャストしてるコードがあった。
もちろんバグなんだが、たまたまオーバーフローをチェックする設定のプロジェクトファイルだったから実行時にOverflowExceptionが出て気づいた。普段だったら気づかなかっただろうなあ。
ついかっとなって型を書いた。
struct Utf32 { public int CodePoint; public Utf32(int codePoint) { this.CodePoint = codePoint; } }
C# にも(usingではない)型エイリアスがあれば不要かもしれないが、型検査で潜在バグを見つけたいという意図からすれば、intと暗黙に相互変換できてしまうとあまりうれしくない。(上の構造体にもキャスト演算子は定義しなかった)