C# Convert.ChangeType上的运行时异常,列表为<&燃气轮机;
我试图通过Convert.ChangeType运行列表(强制转换为对象)时遇到运行时异常。这基本上就是设置:C# Convert.ChangeType上的运行时异常,列表为<&燃气轮机;,c#,C#,我试图通过Convert.ChangeType运行列表(强制转换为对象)时遇到运行时异常。这基本上就是设置: using System; using System.Collections.Generic; public class Program { public static void Main() { List<string> list = new List<string>{ "1", "2", "3"}; Utils
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<string> list = new List<string>{ "1", "2", "3"};
Utils utils = new Utils();
utils.ChangeType(list, typeof(List<int>));
Console.WriteLine("Done!");
}
}
public class Utils
{
public object ChangeType(object obj, Type type)
{
return Convert.ChangeType(obj, type);
}
}
我不知道如何解决这个问题。我认为我应该将Utils.ChangeType中的对象obj强制转换为泛型类型的列表(如果它是一个列表),但我无法让它工作
有人知道如何解决此问题吗?我通过在Utils.ChangeType中添加以下检查来解决此问题:
if (IsList(obj))
{
List<object> objs = ((IEnumerable)obj).Cast<object>().ToList();
Type containedType = type.GenericTypeArguments.First();
return objs.Select(item => Convert.ChangeType(item, containedType)).ToList();
}
if(IsList(obj))
{
List objs=((IEnumerable)obj.Cast().ToList();
Type containedType=Type.GenericTypeArguments.First();
返回objs.Select(item=>Convert.ChangeType(item,containedType)).ToList();
}
IsList是UTIL中检查对象是否为列表的通用函数
请参见。作为例外状态,您尝试在其上使用convert的对象未实现IConvertible。您正在尝试将字符串列表转换为整数列表,列表类型未实现所需的接口 字符串和int类型实现了此接口,因此您可以这样做:
List<string> list = new List<string> { "1", "2", "3" };
Utils utils = new Utils();
var result = list.Select(o => (int)Convert.ChangeType(o, typeof(int)));
Console.WriteLine("Done!");
List List=新列表{“1”、“2”、“3”};
Utils Utils=新Utils();
var result=list.Select(o=>(int)Convert.ChangeType(o,typeof(int));
控制台。WriteLine(“完成!”);
或者更简洁地说:
List<string> list = new List<string> { "1", "2", "3" };
Utils utils = new Utils();
var result = list.Select(Int32.Parse);
Console.WriteLine("Done!");
List List=新列表{“1”、“2”、“3”};
Utils Utils=新Utils();
var result=list.Select(Int32.Parse);
控制台。WriteLine(“完成!”);
。我已经发布了我自己对这个问题的答案。谢谢你的洞察力!
List<string> list = new List<string> { "1", "2", "3" };
Utils utils = new Utils();
var result = list.Select(Int32.Parse);
Console.WriteLine("Done!");