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 次 |
| 最近记录: |