平々毎々(アーカイブ)

はてなダイアリーのアーカイブです。

サロゲートペアとか

とあるJavaのコードをC#でリライトしてたのだが、UTF32(int)をUTF16(char)にカジュアルにキャストしてるコードがあった。
もちろんバグなんだが、たまたまオーバーフローをチェックする設定のプロジェクトファイルだったから実行時にOverflowExceptionが出て気づいた。普段だったら気づかなかっただろうなあ。

ついかっとなって型を書いた。

struct Utf32
{
    public int CodePoint;
    public Utf32(int codePoint)
    {
        this.CodePoint = codePoint;
    }
}

C# にも(usingではない)型エイリアスがあれば不要かもしれないが、型検査で潜在バグを見つけたいという意図からすれば、intと暗黙に相互変換できてしまうとあまりうれしくない。(上の構造体にもキャスト演算子は定義しなかった)