【发布时间】:2016-11-07 06:56:07
【问题描述】:
我必须先将字符串用逗号分割,然后再转换为int数组。
以下行运行良好
int[] array = input.Split(',').Select(obj=>Convert.ToInt32(obj)).ToArray();
但我想使用强制转换扩展方法以不同的方式做到这一点。
int[] array = input.Split(',').Cast<int>().ToArray();
但使用强制转换扩展会引发无效的强制转换操作异常。
我什至在强制转换之前应用了 ofType(),这并不是真正需要但仍然无法正常工作。
int[] array = input.Split(',').OfType<string>().Cast<int>().ToArray();
我在这里犯了什么错误。
我正在以适当的方式使用强制转换方法。
【问题讨论】:
-
@peter 请先阅读我的问题
-
要使
Cast<T>()方法起作用,对象必须已经是正确的类型。Cast<T>()方法只重新解释数据,它不做任何转换。有关将字符串解析为int的正确技术,请参阅标记的副本。 -
@PeterDuniho,所以它不键入 cast,那么为什么它被命名为 cast
-
它确实投射。但是 C# 中的强制转换运算符根据上下文做了两件不同的事情:重新解释和转换。该方法以重新解释的意义而不是转换意义的强制转换运算符命名。坦率地说,您最好通过阅读 C# 语言文档来回答您的问题,了解 cast 运算符和 MSDN 文档,了解
Cast<T>()方法。所有的答案都在里面。 -
请注意,即使
Cast<T>()方法确实支持 C# 中的转换意义,它仍然不起作用,因为没有从 @987654329 定义的显式转换@到int。无论如何,您都必须使用解析方法(例如int.Parse())。
标签: c# .net linq linq-to-xml