0

我编写了这个方法来将逗号分隔的字符串转换为它的类型列表:

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

但它会抛出一个异常,说“指定的演员表无效。”
我已经用长输入对其进行了测试。

4

1 回答 1

7

如果T字符串(我测试过),您的代码当然可以工作。

如果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()知道如何从string转换为的某种类型。

于 2012-07-29T07:24:48.433 回答