迭代VB.Net中的二维数组

迭代VB.Net中的二维数组,第1张

概述我对以下代码在Vb.Net中工作感到惊讶(并且感到震惊) Dim test2DArr As String(,) = {{"A", "B"}, {"C", "D"}}For Each s As String In test2DArr MsgBox(s)Next 运行时,d出四个消息框,显示“A”,“B”,“C”,然后“D”. 换句话说,它具有与以下完全相同的行为: Dim test1DAr 我对以下代码在Vb.Net中工作感到惊讶(并且感到震惊)

Dim test2DArr As String(,) = {{"A","B"},{"C","D"}}For Each s As String In test2DArr  MsgBox(s)Next

运行时,d出四个消息框,显示“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).这解释了为什么你的第二个代码无法工作:为了使它工作,数组的类型必须是不同的.

总结

以上是内存溢出为你收集整理的迭代VB.Net中的二维数组全部内容,希望文章能够帮你解决迭代VB.Net中的二维数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1212969.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存