RunningCSharp

.net中心の開発話。記事は個人の見解であり、所属組織を代表するものてはありません。

C#:unsafeでboolにintを入れてみる

C#界隈で非常に有名なお方が「unsafeとかリフレクションでboolにtrue, false以外の値が入れられる」といった旨を呟かれていたのを拝見しました。 「unsafeでならintは入るかも」と思い、恐縮ながら試してみました。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(IntToBool(0));
        Console.WriteLine(IntToBool(5));
        Console.ReadKey();
    }
    unsafe static bool IntToBool(int _int)
    {
        int* intptr = &_int;
        bool* boolptr = (bool*)intptr;
        return *boolptr;
    }
}

結果(実際はコンソールに表示されます)

False

True

少し試した程度ですが、0はFalse、0以外はTrueで扱われる模様です。