表題のとおり。 LINQのCastでint→longとかint→shortとか、 その他数値間のキャストをしようとすると InvalidCastExceptionで落ちる。最近知った。 OfType()だとエラーにはならないが、要素が1つも返ってこない。 コードは以下。 int[] ints = new [] { 1, 2, 3 }; long[] longs = ints.Cast<long>().ToArray(); //throws InvalidCastException ToArray()はクエリを実行させるために入れてるだけなので何でも良い。 んで、理由はCastメソッドの実体を覗くとよくわかる。 (ILSpyで見たもの) // System.Linq.Enumerable private static IEnumerable<TResult> CastIterator<TRe