我得到了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# ×1