我编写了这个方法来将逗号分隔的字符串转换为它的类型列表:
public List<T> GetListFromString<T>(string commaSplited)
{
return commaSplited.Split(',').Cast<T>().ToList();
}
但它会抛出一个异常,说“指定的演员表无效。”
我已经用长输入对其进行了测试。
如果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转换为的某种类型。