RunningCSharp

MS系開発者による、雑多な記事。記事は所属企業とは関係のない、個人の見解です。

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で扱われる模様です。