当我点击这行代码时
(T)Convert.ChangeType(data.Split(new char[] { '¤' }), typeof(T));
我收到对象未实现IConvertible 的错误。 T
是IEnumerable<String>
,data
是String
。可以做些什么呢?
我尝试在更改类型之前明确地将它转换为一堆不同的东西,但我无法让它工作。我正在将其他内容转换为Dictionary
和本地类型,但这个特别令我头痛。
答案 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[]
参数。