使用动态对象
动态对象ExpandoObject使用起来比JObject方便,因为可以用圆点(.)符号访问数据。
示例一
在命令窗口测试执行:
Dim
person
As
Object
=
New
ExpandoObject()
person.Name =
"张三"
'
字符串
person.Age = 25
'
整数
person.IsStudent =
False
'
布尔值
person.Scores = {85, 90, 95}
'数组
person.Row =
Tables("表A").Current
'任意类型
person.Age = 26
'修改
person.Row("第一列")
=
"foxtable"
'修改
Output.Show("年龄:"
& person.Age)
Output.Show("第一科分数:"
& person.Scores(0))
Output.Show("第一列:"
& person.Row("第一列"))
示例二
ExpandoObject不仅可以动态扩展属性,还可以动态扩展方法。
在命令窗口测试执行:
Dim
calculator
As
Object
=
New
ExpandoObject()
calculator.name =
"我是一个计算器"
'动态添加属性
' 动态添加无参方法
calculator.SayHello =
Sub()
MessageBox.Show("Hello
Foxtable!")
' 动态添加带参方法
calculator.Add =
Function(a
As
Integer,
b
As
Integer)
As
Integer
a = a + 1
b = b + 2
Return
a + b
End
Function
Dim
sum
As
Double
= calculator.Add.Invoke(10, 11)
'方法要通过Invoke调用
calculator.SayHello.Invoke()
MessageBox.Show(calculator.name &
",计算结果:"
& sum)
示例三
ExpandoObject可以很方便地遍历,请在命令窗口测试执行:
Dim
product
As
Object
=
New
ExpandoObject()
product.Id =
1001
product.Name =
"Foxtable开发宝典"
product.Price = 89.9
product.Stock = 500
'遍历
For
Each
kvp
As
Object
In
product
Output.Show(kvp.Key &
":"
& kvp.Value)
Next
示例四
ExpandoObject可以删除属性,也可以判断某个属性是否存在,不过必须先转换为IDictionary(Of String, Object)才行。
请在命令窗口测试执行:
Dim
user
As
Object
=
New
ExpandoObject()
user.Name =
"李四"
user.Age = 30
user.City =
"上海"
Dim
userDict
As
IDictionary(Of
String,
Object)
= user
If
userDict.ContainsKey("Name")
Then
Output.Show(user.Name)
Else
Output.Show("Name属性不存在!")
End
If
userDict.Remove("Name")
'删除Name属性
If
userDict.ContainsKey("Name")
Then
Output.Show(user.Name)
Else
Output.Show("Name属性不存在!")
End
If