相关疑难解决方法(0)

在C#中从uint []转换为int []后调用ToList()的异常

我得到了System.ArrayTypeMismatchException: Source array type cannot be assigned to destination array type此代码段的异常:

var uints = GetArray();
if (uints is int[])
{
    var list = ((int[])uints).ToList(); // fails when call ToList()
}

private Array GetArray()
{
    var result = new uint[] { uint.MaxValue, 2, 3, 4, 5 };
    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后我求助于Jon的回答为什么在C#中"int []是uint [] == true",它告诉我,由于GetArray()返回a Array,转换在运行时被推迟,而CLR允许这种转换int[] to uint[](vice versa).如果我在转换后检查值,它实际上工作正常:

foreach (var i in ((int[])units))
{
    System.Console.WriteLine(i.GetType());
    System.Console.WriteLine(i);
}
Run Code Online (Sandbox Code Playgroud)

我会得到:

System.Int32
-1
System.Int32 …
Run Code Online (Sandbox Code Playgroud)

c#

9
推荐指数
2
解决办法
294
查看次数

标签 统计

c# ×1