Background:
最近试图回答一个question https://stackoverflow.com/q/58835358/9758194,我自己在想是否可以直接从字典项返回类对象属性的数组。
Code:
Imagine TstClass
作为具有以下代码的类模块:
Public val1 As Variant
Public val2 As Variant
Public val3 As Variant
然后用这段代码来测试:
Sub Test()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim lst As TstClass, key As Variant, arr As Variant
For x = 1 To 3
Set lst = New TstClass
lst.val1 = "A" & x
lst.val2 = "B" & x
lst.val3 = "C" & x
dict.Add x, lst
Next x
For Each key In dict
arr = Array(dict(key).val1, dict(key).val2, dict(key).val3)
Next key
End Sub
Problem:
在上述情况下Array(dict(key).val1, dict(key).val2, dict(key).val3)
会很好地返回数组,但如果我们想象val4-val50
它将变成更多的代码。要么与Array(...)
或者逐行写出来Debug.Print Dict(key).Valx
.
Question:
是否可以直接从字典键的类对象属性返回数组?对我来说最明显的尝试是arr = Dict(key)
希望它能以某种方式认识到我需要该项目的所有属性。最重要的是,不允许将常量、数组、用户定义类型声明为公共,所以类似Public Vals(0 to 2)
也行不通。
谢谢你,
联合病毒
不确定这是否是exactly你想要什么,但可以在你的类中创建一个方法来构建你想要的属性的数组。然后,您可以在类的每个实例上调用它来获取数组详细信息。
类 - 名为“Example”:
Public val1 As Variant
Public val2 As Variant
Public val3 As Variant
Public Function GetArray() As Variant
GetArray = Array(Me.val1, Me.val2, Me.val3)
End Function
客户端代码 - 在标准模块中:
Sub SOExample()
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim lst As Example, arr As Variant, key As Variant
For x = 1 To 3
Set lst = New Example
lst.val1 = "A" & x
lst.val2 = "B" & x
lst.val3 = "C" & x
dict.Add x, lst
Next
For Each key In dict.keys
arr = dict(key).GetArray
Debug.Print Join(arr, ",")
Next
End Sub
Output:
A1,B1,C1
A2,B2,C2
A3,B3,C3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)