gpt4 book ai didi

c# - 使用 Array.CreateInstance 和 new 运算符实例化数组的区别

转载 作者:太空宇宙 更新时间:2023-11-03 18:23:16 24 4
gpt4 key购买 nike

我可以看到以下两种在 C# 中实例化 int 数组的方法:

  1. 通过 System.Array 抽象类中的 API:

    var arrayInstance = Array.CreateInstance(typeof(int), 4);
  2. 通过各种数组初始化语法:

    var arrayInstanceWithSyntax = new int[4];

以上两种方式是否完全相同?编译器是否在编译时自行将第二种语法转换为第一种语法,然后将其作为 MSIL 嵌入到 DLL 中?此外,是否有可能在运行时发生在 CLR 级别的一些 JIT 魔术,或者两种代码语法之间没有发生转换?

最佳答案

它们肯定会创建相同类型的值 - 与调用 Array.CreateInstance 并创建具有非零下限的数组不同,例如。

但是,它们在 IL 方面并不相同 - 第一个只是方法调用,第二个使用 newarr IL 指令。

这里不需要任何类型的“JIT 魔法”——只有两条路径可以创造相同类型的值(value)。

虽然您的第一个变量的编译时 类型只是Array - 您必须将其转换为int[]这两段代码确实有相同的结果。

我会尽可能使用“C# native”数组创建语法——仅当您出于某种原因(而不是知道在编译时,甚至通过泛型类型参数)...或者如果您尝试创建一个可能具有非零下限的数组。

关于c# - 使用 Array.CreateInstance 和 new 运算符实例化数组的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43580956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com