Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Convert.ChangeType上的运行时异常,列表为<&燃气轮机;_C# - Fatal编程技术网

C# 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

我试图通过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 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!");