【问题标题】:Is there a difference in these declarations?这些声明有区别吗?
【发布时间】:2015-11-14 03:52:36
【问题描述】:

这两个都声明锯齿状列表正确?

//Declare 'Jagged' List
//Version 1
private List<string>[] fieldInfoArray = new List<string>[7];

//Version 2
private List<string>[][] fieldInfoArray = new List<string>[7][];

这两个声明没有区别吧?他们基本上都在做同样的事情对吗?声明一个锯齿状列表?

【问题讨论】:

  • 你声明了两个完全不同的对象。所以是的,有很大的不同
  • 更具体。在我的代码中,它们似乎都在声明一个数组数组(或列表列表),但是您想这样想。
  • @Shammy 您不应该根据调试显示的内容来判断这个概念,因为编译器会优化代码。例如,声明一个不使用的变量并在其上设置断点。变量存在,但调试器永远不会登陆它。
  • @SILENT 当我使用断点进行调试并将鼠标悬停在手头的对象上时,即 fieldInfoArray(第一个声明)它有一个包含 8 个数组的数组。所以每个人说的都是没有意义的,或者他们只是不知道你可以这样声明,或者还有其他一些非常奇怪的事情发生了哈哈
  • @Shammy 我创建了一个快速代码示例并对其进行了测试。我得到了 7 个新 List[7] 的数组。不知道你在说什么 8 个数组。

标签: c# jagged-arrays


【解决方案1】:
  • 两者都声明数组。当您尝试访问任一数组的元素时,将返回List&lt;string&gt;
  • 第一个是大小为 7 的一维数组。所有 7 个元素都是 List&lt;string&gt;s。
  • 第二个数组也是一个大小为 7 的一维数组,但这 7 个元素中的每一个都是List&lt;string&gt; 的另一个"一维数组 "(不仅仅是“List&lt;string&gt;”)。

【讨论】:

  • 矩形数组不是定义为Array[3,4]吗?
  • 这是不正确的,我的第一个声明绝对不是单个数组。我可以在调试模式下向您发送它的图像,它是一个数组数组。这就是为什么我很困惑。
  • @Shammy 你不应该根据调试显示的内容来判断这个概念,因为编译器会优化代码。
  • 啊,我继续发布它,我想不通。我也试过了
  • @Shammy 关于“声明绝对不是单个数组”。和“调试显示它是数组数组”。实际上调试将其显示为列表数组。 List 基本上是一个数组。这就是它如此令人困惑的原因。
【解决方案2】:
private List<string>[] fieldInfoArray = new List<string>[7];

这是声明一个数组,大小为 7,List&lt;string&gt;

private List<string>[][] fieldInfoArray = new List<string>[7][];

这是声明一个二维数组List&lt;string&gt;,包含7行尚未初始化/分配的List&lt;string&gt;数组。

【讨论】:

  • 第二个数组是交错数组,不是二维数组。
  • 是的。我想我仍然习惯称它们为二维数组,因为我仍然认为它们是二维的,即使它们在分配方面可能无法形成完美的二维正方形。 :)
  • 您声称第一个是一维数组,但您有多确定?你真的试过了吗?在我的代码中,它将它视为一个数组数组。
  • 数组(不要与 Array 类混淆)不是 List 对象。它是一个指向关联内存块的指针。你有一个列表数组。此数组中有 7 个列表。每个 List object 都有一个模板化对象链。在这种情况下,一个字符串。
  • 一个小写的“数组”,是的。还有一个名为 Array 的对象不应与之混淆。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 2015-12-14
  • 2015-06-07
相关资源
最近更新 更多