System.InvalidCastException

無効なキャストまたは明示的な型変換に対してスローされる例外。

[実験ソース(C#)]

using System;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            //Char から Boolean、Single、Double、Decimal、または DateTime への変換。

            Boolean a = Convert.ToBoolean('a');



            //Boolean、Single、Double、Decimal、または DateTime から Char への変換。

            Char b = Convert.ToChar(true);



            //DateTime から String 以外の任意の型への変換。

            int c = Convert.ToInt32(DateTime.Now);



            //String 以外の任意の型から DateTime への変換。

            DateTime d = Convert.ToDateTime(20100927);

        }

    }

}

[結果]


ハンドルされていない例外: System.InvalidCastException: 'Char' から 'Boolean' への無効なキャストです。
場所 System.Char.System.IConvertible.ToBoolean(IFormatProvider provider)
場所 ConsoleApplication1.Program.Main(String[] args) 場所 Program.cs:行 9

[対処など]
MSDN の Convert クラスに書かれていた4つの例を確認。この実験例は4つとも InvalidCastException が発生する。
ところが、InvalidCastException クラスに書かれていた例を試そうとしたが、OverflowException や InvalidOperationException が発生した。(解釈が間違っているのかも・・・)
試したプログラムは、次のとおり。

[実験ソース(C#)]

using System;

namespace ConsoleApplication1

{

    class Program

    {

        static void Main(string[] args)

        {

            //Single または Double から Decimal への変換で、変換元の値が無限、非数 (NaN)、または変換先の型で表現するには大きすぎる値の場合。

            Decimal e = Convert.ToDecimal(Double.NaN); // OverflowException

            Decimal f = Convert.ToDecimal(Double.PositiveInfinity); // OverflowException

            Decimal g = Convert.ToDecimal(null); // エラーにならない



            //明示的な参照変換の際にエラーが発生した場合。

            Double? x = null;

            Decimal h = (Decimal)x; // InvalidOperationException

        }

    }

}