.net – 将列表的枚举器传递给函数

.net – 将列表的枚举器传递给函数,第1张

概述看起来将列表的枚举传递函数“byval”与传递“byref”完全不同.基本上,常规的“byval”传递不会改变调用者的“enumerator.Current值”,即使该函数使枚举器前进.我想知道是否有人知道为什么会这样?枚举器是一个整数的原语,没有对象引用,因此对它的更改不会反映在调用者中吗? 以下是示例代码: 这个函数是byval,并且陷入无限循环,吐出“1”消息框,因为枚举器的“当前”从未 @H_419_6@ 看起来将列表的枚举器传递给函数“byval”与传递“byref”完全不同.基本上,常规的“byval”传递不会改变调用者的“enumerator.Current值”,即使该函数使枚举器前进.我想知道是否有人知道为什么会这样?枚举器是一个整数的原语,没有对象引用,因此对它的更改不会反映在调用者中吗?

以下是示例代码:

这个函数是byval,并且陷入无限循环,吐出“1”消息框,因为枚举器的“当前”从未超过5:

Public Sub ListItemsUsingByValFunction()    Dim List As New List(Of Integer)(New Integer() {1,2,3,4,5,6,7,8,9,10})    Dim enumerator = List.GetEnumerator()    enumerator.MoveNext()    While enumerator.Current <= 5        ListFirstItemByVal(enumerator)    End WhileEnd SubPrivate Sub ListFirstItemByVal(ByVal enumerator As List(Of Integer).Enumerator)    MsgBox(enumerator.Current)    enumerator.MoveNext()End Sub

另一方面,这可以像人们期望的那样工作:

Public Sub ListItemsUsingByRefFunction()    Dim List As New List(Of Integer)(New Integer() {1,10})    Dim enumerator = List.GetEnumerator()    enumerator.MoveNext()    While enumerator.Current <= 5        ListFirstItemByRef(enumerator)    End WhileEnd SubPrivate Sub ListFirstItemByRef(ByRef enumerator As List(Of Integer).Enumerator)    MsgBox(enumerator.Current)    enumerator.MoveNext()End Sub

两个函数之间的区别仅在于ListFirstItem__函数是接受byval还是byref枚举器.

解决方法 你看到这种行为的原因是List(Of T).Enumerator是一个结构而不是通常所期望的类.因此,当您传递枚举器时,您传递了它的副本,因此当您调用MoveNext时,只会更新该副本 总结

以上是内存溢出为你收集整理的.net – 将列表的枚举器传递给函数全部内容,希望文章能够帮你解决.net – 将列表的枚举器传递给函数所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/langs/1242038.html

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

发表评论

登录后才能评论

评论列表(0条)

保存