如果我可以隐式地将整数值转换为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)会导致相同的错误。
我做错了什么?
答案 0 :(得分:55)
嗯,你对Cast
的期望不正确,这就是全部 - 这意味着要处理装箱/拆箱,参考和身份转换,这就是全部。遗憾的是,文档并不像它可能那样清晰:(
解决方案是使用Select
:
doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
答案 1 :(得分:8)
要添加到Jon的答案,对于实现IEnumerable
但没有其他内容的对象主要有用。以XmlNodeList为例。如果您没有使用System.Xml.Linq
命名空间,可以使用Cast<XmlElement>
编写一些不错的LINQ查询。
var result = xmlNodeList
.Cast<XmlElement>()
.Select(e=> e.GetAttribute("A") + e.GetAttribute("B"))
.ToArray();