out*_*son 39 c# ienumerable casting
如果我可以隐式地将整数值转换为double,例如:
int a = 4;
double b = a;
// now b holds 4.0
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做:
int[] intNumbers = {10, 6, 1, 9};
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();
Run Code Online (Sandbox Code Playgroud)
我得到"指定的演员表无效" InvalidCastException
例外.
相反(从double转换为int)会导致相同的错误.
我究竟做错了什么?
Jon*_*eet 56
好吧,你有不正确的期望Cast
,这就是全部 - 它意味着处理装箱/拆箱,参考和身份转换,这就是全部.不幸的是,文档并不像它可能那样清晰:(
解决方案是使用Select
:
doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();
Run Code Online (Sandbox Code Playgroud)
添加到Jon的答案中,主要用于实现IEnumerable
但没有其他任何内容的对象.以XmlNodeList为例.如果您没有使用System.Xml.Linq
命名空间的奢侈,您可以使用它Cast<XmlElement>
来编写一些不错的LINQ查询.
var result = xmlNodeList
.Cast<XmlElement>()
.Select(e=> e.GetAttribute("A") + e.GetAttribute("B"))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22189 次 |
最近记录: |