为什么根据我初始化值的方式将值强制转换为IEnumerable <T>会有所不同?

RSid

我有一些代码需要一个值(类型对象),并尝试将其强制转换为int和uint的IEnumerable,如下所示:

var idList = value as IEnumerable<int>;
var uintList = value as IEnumerable<uint>;

以这种方式初始化值时:

uint number = 1;
object value = new []{ number };

idList和uintList都具有值,但是调用idList.ToList()会导致ArrayTypeMismatchException但是,当使用生成值时new List<uint>{ number },idList为预期的空值。

此外,var idList = value as IEnumerable<int>;在VS 2015中立即窗口中调用会返回空值,正如我期望的那样,即使使用集合初始化程序生成了该值也是如此。

.Net在这里重现错误

这里发生了什么?

EVK

我认为这是因为C#和CLR处理int之间的转换之间存在异常的区别uint,如本答案所述首先请注意,该代码不会编译:

uint[] a1 = new[] { 1u };
var a2 = (int[])a1;

因为C#不相信存在强制转换。但是,如果您采用这种方式:

uint[] a1 = new[] { 1u };
var a2 = (int[]) (object) a1;

运行时将决定此强制转换是否有效,并且它(CLR)会以不同的方式考虑,并允许从uint[]int[](反之亦然)强制转换,如我所链接的答案中所述。

但相同的是不是真正的List<int>List<uint>-它们不是由CLR一种特殊的方式,因此不能相互之间施放治疗。

因此,在您的情况下,uint[]可以强制转换为int[]int[]实现IEnumerable<int>,因此您idList不为null。对于列表而言,这不是正确的-因此是您的问题。

至于为什么ToList在第一种情况下会失败,那是因为在内部它会执行以下操作:

 uint[] a1 = new[] { 1u };
 var a2 = (int[]) (object) a1;
 // ToList copies contents to new array
 int[] copy = new int[a2.Length];
 Array.Copy(a2, copy, a2.Length);

Array.Copy直接检查一个数组中的元素类型是否与另一数组中的元素类型兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么不同的排序分类安装会有所不同?

来自分类Dev

为什么python'in'运算符根据元组大小会有所不同?

来自分类Dev

以不同方式执行脚本时,import 的行为会有所不同吗?

来自分类Dev

为什么我的html中的类顺序会有所不同?

来自分类Dev

如果我使用 glFrustum,为什么绘制的这个对象会有所不同?

来自分类Dev

为什么当我使用“end”或“\n”或“”(空格)语句时会有所不同?

来自分类Dev

为什么有时自己的敏捷状态会有所不同?

来自分类Dev

为什么将通配符放在grep短语的开头或结尾时会有所不同?

来自分类Dev

为什么小数值的反t分布在Matlab和R中有所不同?

来自分类Dev

为什么输出会有所不同?为什么数据可以自行更改?

来自分类Dev

实例化新线程的方式会有所不同吗?

来自分类Dev

如何从表格中删除某个值,该值在Excel中会有所不同

来自分类Dev

为什么分别编译和链接功能时性能会有所不同?

来自分类Dev

为什么该Haskell程序会有所不同?

来自分类Dev

为什么电子邮件布局在Yahoo和Gmail中会有所不同

来自分类Dev

为什么选择binaryw。宽度58上方的格式会有所不同吗?

来自分类Dev

为什么在静态连接时Web套接字的延迟会有所不同?

来自分类Dev

为什么C和C#之间的双精度会有所不同?

来自分类Dev

为什么OOP中的静态类的最佳实践会有所不同?

来自分类Dev

为什么在Dom对象中为其分配变量会有所不同

来自分类Dev

为什么关机时间会有所不同?

来自分类Dev

为什么memset在功能上会有所不同?

来自分类Dev

为什么使用WebClient UploadData后文件大小会有所不同?

来自分类Dev

为什么for循环和forEach会有所不同?

来自分类Dev

如果使用相同的种子,引导方法的结果为什么会有所不同?

来自分类Dev

如果实现了数据集,为什么查询结果会有所不同?

来自分类Dev

为什么以foreach调用时,ForEach-Object的行为会有所不同?

来自分类Dev

使用-all标志时,为什么pdfimages生成的图像会有所不同?

来自分类Dev

为什么关机时间会有所不同?

Related 相关文章

  1. 1

    为什么不同的排序分类安装会有所不同?

  2. 2

    为什么python'in'运算符根据元组大小会有所不同?

  3. 3

    以不同方式执行脚本时,import 的行为会有所不同吗?

  4. 4

    为什么我的html中的类顺序会有所不同?

  5. 5

    如果我使用 glFrustum,为什么绘制的这个对象会有所不同?

  6. 6

    为什么当我使用“end”或“\n”或“”(空格)语句时会有所不同?

  7. 7

    为什么有时自己的敏捷状态会有所不同?

  8. 8

    为什么将通配符放在grep短语的开头或结尾时会有所不同?

  9. 9

    为什么小数值的反t分布在Matlab和R中有所不同?

  10. 10

    为什么输出会有所不同?为什么数据可以自行更改?

  11. 11

    实例化新线程的方式会有所不同吗?

  12. 12

    如何从表格中删除某个值,该值在Excel中会有所不同

  13. 13

    为什么分别编译和链接功能时性能会有所不同?

  14. 14

    为什么该Haskell程序会有所不同?

  15. 15

    为什么电子邮件布局在Yahoo和Gmail中会有所不同

  16. 16

    为什么选择binaryw。宽度58上方的格式会有所不同吗?

  17. 17

    为什么在静态连接时Web套接字的延迟会有所不同?

  18. 18

    为什么C和C#之间的双精度会有所不同?

  19. 19

    为什么OOP中的静态类的最佳实践会有所不同?

  20. 20

    为什么在Dom对象中为其分配变量会有所不同

  21. 21

    为什么关机时间会有所不同?

  22. 22

    为什么memset在功能上会有所不同?

  23. 23

    为什么使用WebClient UploadData后文件大小会有所不同?

  24. 24

    为什么for循环和forEach会有所不同?

  25. 25

    如果使用相同的种子,引导方法的结果为什么会有所不同?

  26. 26

    如果实现了数据集,为什么查询结果会有所不同?

  27. 27

    为什么以foreach调用时,ForEach-Object的行为会有所不同?

  28. 28

    使用-all标志时,为什么pdfimages生成的图像会有所不同?

  29. 29

    为什么关机时间会有所不同?

热门标签

归档