无法将数组转换为IEnumerable

时间:2013-11-19 14:44:04

标签: c#

当我点击这行代码时

(T)Convert.ChangeType(data.Split(new char[] { '¤' }), typeof(T));

我收到对象未实现IConvertible 的错误。 TIEnumerable<String>dataString。可以做些什么呢?

我尝试在更改类型之前明确地将它转换为一堆不同的东西,但我无法让它工作。我正在将其他内容转换为Dictionary和本地类型,但这个特别令我头痛。

4 个答案:

答案 0 :(得分:7)

为什么需要致电Convert.ChangeType()

在以下代码中,theEnumerable的类型为IEnumerable<string>

var inputString = "a,b,c";
var theEnumerable = inputString.Split(',').AsEnumerable();

答案 1 :(得分:3)

从根本上说,对象的类型不能是接口,只能是实现接口的类型。由于Array实现了IEnumerable,你的字符串[]已经是你想要的了。

答案 2 :(得分:2)

(T)data.Split(new char[] { '¤' }).AsEnumerable();

答案 3 :(得分:1)

已经String.Split的输出IEnumerable,为string[]。以下两者都编译得很好:

IEnumerable e1 = data.Split('¤');
IEnumerable<string> e2 = data.Split('¤');

提供T是一个通用类型参数,您可以随时执行此操作:

T e = data.Split('¤') as T;

但是,您可能应该引入where T : IEnumerable<String>约束来使代码真正安全。

另请注意,您不必实例化数组以将参数传递给params string[]参数。