我见过很多解决方案,但仅针对特殊情况,例如:
Method<int>()
或Method<string>()
... 但我只知道运行时的类型,所以上面的要点不符合要求。我需要成为最通用的。这是迄今为止的代码:
Type typ = GetTheType(); // the type in which I want to convert those strings. It can be int, double, or whatever
string[] array = GetArrayOfStrings(); // I get the array from somwhere
var arrayConverted = array.Select(p => Convert.ChangeType(p, typ)).ToArray(); // I tested the code with typ=int32 and arrayConverted is of type object[]
arrayConverted碰巧是object []而不是int [],因为我测试了它。 有什么想法吗?
修改
这些要点代表已知的解决方案,我需要一个通用的解决方案,我不知道untile运行时的类型
答案 0 :(得分:-1)
这似乎就是你所要求的......
你需要
using System;
using System.ComponentModel;
然后用这种方法完成这项工作。
public T[] ConvertStringArray<T>(string[] data)
{
var returnData = (T[])Array.CreateInstance(typeof(T),data.Length);
var i = 0;
foreach(var item in data)
{
returnData[i] = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(item);
i++;
}
return returnData;
}
要指出 - 如果数组中传递的一个或多个字符串无法转换为类型T,则会抛出转换异常。