私が暗黙的に整数値をdoubleにキャストできる場合:
int a = 4;
double b = a;
// now b holds 4.0
なぜこれができないのですか?
int[] intNumbers = {10, 6, 1, 9};
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();
「指定されたキャストは無効です」というInvalidCastException
例外が発生します。
逆の操作(doubleからintへのキャスト)を実行すると、同じエラーが発生します。
何が悪いのですか?
まあ、Cast
に対する期待は正しくありません。それだけです-ボクシング/アンボクシング、参照とIDの変換を処理するためのもので、それだけです。残念ながら、ドキュメントは:(ほど明確ではありません。
解決策はSelect
を使用することです:
doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
Jonの回答キャストに追加することは、主にIEnumerable
を実装するオブジェクトにのみ役立ちますが、他には何もしません。 XmlNodeList を例にとります。 System.Xml.Linq
名前空間を使用する余裕がない場合は、Cast<XmlElement>
を使用して、それに対するいくつかのNice LINQクエリを作成できます。
var result = xmlNodeList
.Cast<XmlElement>()
.Select(e=> e.GetAttribute("A") + e.GetAttribute("B"))
.ToArray();