使用动态对象

动态对象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

 


本页地址:http://www.foxtable.com/webhelp/topics/6387.htm