在sub过程中ReDim形参数组遇到问题

hhddzz 2009-06-16 08:39:34
我写了一个删除数组中某些元素的Sub过程
Sub RemoveAt(Byref Array as Object,Byval index as Integer)
在过程的最后ReDim(Array,Ubound(Array)-1)的时候会出现“指定的转换无效”错误

如果在参数列表里指明数组的类型,就不会出错,
比如Sub RemoveAt(Byref Array() as Integer,Byval index as Integer)
可是这样就不能普遍应用

然后我又试了下面的写法
Sub RemoveAt(Byref Array() as Object,Byval index as Integer)
可是当实参数组的元素是值类型时会提示“值类型的XX无法转化为引用类型的System.Object”

我想问的就是:
1.这个sub过程的参数列表应该怎么写
2.第三中情况中,为什么会无法转化为Object,所有类型都能隐式转化成Object吧?
...全文
84 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhddzz 2009-06-17
  • 打赏
  • 举报
回复
那一句是我写帖子时写错了,本来的代码是(太依赖IDE了……)
ReDim Preserve Array(Ubound(Array) - Length)

tj3004204004 2009-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sytsyt0329 的回复:]
首先可以不用动用泛型去解决,以下方法更简单。
你对对重定义数组的知识有些遗漏,ReDim前面加上一个Preserve关键字,而且ReDim(Array,Ubound(Array)-1)的写法是错误的。
应该改为:
Preserve ReDim yourArray(Ubound(yourArray)-1)
[/Quote]
红字部分对的。

Preserve没用过,不了解
sytsyt0329 2009-06-17
  • 打赏
  • 举报
回复
首先可以不用动用泛型去解决,以下方法更简单。
你对对重定义数组的知识有些遗漏,ReDim前面加上一个Preserve关键字,而且ReDim(Array,Ubound(Array)-1)的写法是错误的。
应该改为:
Preserve ReDim yourArray(Ubound(yourArray)-1)
wangjuenhui520 2009-06-16
  • 打赏
  • 举报
回复
楼上的方式使用类数组列表的方式,在这里使用数组列表似乎不合适.

不过可以使用另外的方式那就是使用 .net 的泛类型

例如:

dim Str_(3) as string = new string(){"a","b","c"} '字符串类型
dim int_(3) as integer = new integer(){1,2,3}'数值类型

removeat(of string)(str_,2)
removeat(of integer)(int_,2)
private sub removeat(of t)(byref val as t,byval index as integer)'定义泛类型的方法,将数据更改为指定维度
redim preserve val(index)' 这里指定传递的维度为当前维度长度
For each value as object in val
.........
next
.......
end sub


希望能帮到你哦
古今多少事 2009-06-16
  • 打赏
  • 举报
回复
Sub RemoveAt(Byref Array() as ArrayList,Byval index as Integer)

这样试试

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧