匿名对象

匿名对象类似ExpandoObject,不同的是匿名对象定义好之后,就不能再增加删除属性了。

示例一

请在命令窗口测试执行:

Dim user = New With {.Name = "张三",.Age = 25,.City = "北京" }
Output.Show(user.Name)
'输出
Output.Show(user.Age)
Output.Show(user.City)
user.Name =
"李四" '修改
Output.Show(user.Name)
'输出修改结果

示例二

匿名对象可以嵌套, 请在命令窗口测试执行:

Dim people = {
   
New With {.Name = "张三",.Age = 25,.Score = 80},
   
New With {.Name = "李四",.Age = 30,.Score = 90},
   
New With {.Name = "王五",.Age = 28,.Score = 85}
}

For
Each p As Object In people
   
If p.Score < 85 Then
        p.Score = p.Score + 5
   
End If
    Output.Show(p.Name &
":" & p.Score)
Next

也可以通过索引访问:

Dim people = {
   
New With {.Name = "张三", .Age = 25, .Score = 80},
   
New With {.Name = "李四", .Age = 30, .Score = 90},
   
New With {.Name = "王五", .Age = 28, .Score = 85}
}

For
idx As Integer = 0 To people.Length - 1
    Output.Show(people(idx).Name)
    Output.Show(people(idx).Age)
    Output.Show(people(idx).Score)

Next

示例三

匿名对象一样可以序列化成JSON字符串,请在命令窗口测试执行:

Dim
people = {
   
New With {.Name = "张三", .Age = 25, .Score = {80, 70, 90}},
   
New With {.Name = "李四", .Age = 30, .Score = {90, 98, 100}},
   
New With {.Name = "王五", .Age = 28, .Score = {85, 75, 90}}
}

Dim
json As String = JsonConvert.SerializeObject(people)
Output.Show(json)

输出结果:

[{"Name":"张三","Age":25,"Score":[80,70,90]},{"Name":"李四","Age":30,"Score":[90,98,100]},{"Name":"王五","Age":28,"Score":[85,75,90]}]

提醒:

将JSON字符串反序列化成匿名对象是比较麻烦的,不过通常也完全没必要反序列化成匿名对象,反序列化成JObject或ExpandoObject即可。

示例四

自定义函数如果要返回多个值,用匿名对象是最方便的.

例如新增一个自定义函数test,代码为:

Return
New With {.Name = "张三",.Age = 25,.City = "北京" }

然后在命令窗口执行:

Dim user As Object = Functions.Execute("test")
Output.Show(user.Name)
Output.Show(user.Age)

Output.Show(user.City)

当然你用JObject和ExpandoObject,甚至字典都行,只是这里使用匿名对象更方便一些。


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