通用投射CSV到列表

时间:2012-07-29 07:20:00

标签: c# csv casting

我已经编写了这个方法来将逗号分隔的字符串转换为其类型的List:

public List<T> GetListFromString<T>(string commaSplited)
{
  return commaSplited.Split(',').Cast<T>().ToList();
}

但它抛出一个异常,说'指定的演员表无效'。
我用长输入测试了它。

1 个答案:

答案 0 :(得分:7)

如果 T string (我测试过它),你的代码肯定有效。

如果 T 其他,比如说 int ,你就会得到这个例外。

此作品

List<string> result = GetListFromString<string>("abc, 123, hij");

此失败

List<int> resultInt = GetListFromString<int>("23, 123, 2");

这是因为无法将 string 转换或转换为 int ,例如以下也会失败:

int three = (int)"3";

修复

public List<T> GetListFromString<T>(string commaSplited)
    {
        return (from e in commaSplited.Split(',') 
                select (T)Convert.ChangeType(e, typeof(T))).ToList();
    }

然而所有给定的字符串必须可转换为 T ,例如以下内容仍然会失败:

List<int> resultIntFail = GetListFromString<int>("23, abc, 2");

因为“abc”无法转换为 int 类型。

此外, T 必须是System.Convert()知道如何从字符串转换为的某种类型。