从String []到T []的ChangeType可以为空(int ..)

时间:2015-05-05 16:56:47

标签: c# generics casting changetype

我见过很多解决方案,但仅针对特殊情况,例如:

  • T!= int;
  • T由用户设置,例如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运行时的类型

1 个答案:

答案 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,则会抛出转换异常。