匿名对象
匿名对象类似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,甚至字典都行,只是这里使用匿名对象更方便一些。