加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

迭代VB.Net中的二维数组

发布时间:2020-12-17 07:12:57 所属栏目:百科 来源:网络整理
导读:我对以下代码在Vb.Net中工作感到惊讶(并且感到震惊) Dim test2DArr As String(,) = {{"A","B"},{"C","D"}}For Each s As String In test2DArr MsgBox(s)Next 运行时,弹出四个消息框,显示“A”,“B”,“C”,然后“D”. 换句话说,它具有与以下完全相同的行为:
我对以下代码在Vb.Net中工作感到惊讶(并且感到震惊)

Dim test2DArr As String(,) = {{"A","B"},{"C","D"}}

For Each s As String In test2DArr
  MsgBox(s)
Next

运行时,弹出四个消息框,显示“A”,“B”,“C”,然后“D”.

换句话说,它具有与以下完全相同的行为:

Dim test1DArr As String() = {"A","B","C","D"}

For Each s As String In test1DArr
  MsgBox(s)
Next

有人可以解释这个“功能”吗?我需要在这里施加一些显然不受支持的结构.上面的第一个代码示例应该是:

Dim test2DArr As String(,"D"}}

For Each arr As String(,) In test2DArr
  MsgBox(arr(0) & "," & arr(1))
Next

并且应该产生两个消息框:“A,B”和“C,D”,但是编译器坚持认为迭代2-d数组会产生一个字符串序列,而不是一串字符串数组.

我做错了什么,或者.Net的2-D阵列实现真的很脆弱?

解决方法

is .Net’s implementation of 2-D arrays really that flimsy?

是. .NET中从未真正支持多维数组.我不确定它们为什么存在(与数组数组相反,即锯齿状数组:String()()).在任何情况下,所有支持都是针对一维数组的特殊情况而定制的.无论维度如何,数组的框架类型总是相同的,并且接口实现(在这种情况下为IEnumerable(Of T))是针对这种常见用例而定制的.

这意味着数组的类型始终是“字符串数组”,因此它始终实现接口IEnumerable(Of String).这解释了为什么你的第二个代码无法工作:为了使它工作,数组的类型必须是不同的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读