خوب رواله تعريف Typeهايه دلخواه (يه جوارايي همون استراکچر) مثل پست قبل Object Initializers هست
Dim t = New With {.Name = "Bart", .Age = 24}
در واقع VB9 با استفاده از With و خاصيت Implicitly Typed Local Variables اين سرويس جديد به ما ميده
در ضمن شما ميتونيد از يه آيتم تعريف شده در يه Typeايي که در چند خط قبل تعريف کرديد به عنوانه يه Property در يه Type جديد استفاده کنيد VB9 خودش ميره تشخيص نوعو مشخصات اونو و جايگزينش ميکنه
Dim t = New With {.Name = "Bart", .Age = 24}
Dim id = 123
Dim u = New With {.Id = id, t.Name, t.Age}
در واقع اون برابر با
Dim u = New With {.Id = id, .Name = t.Name, .Age = t.Age}
چندتا نکته :
اگه شما از ToString استفاده کنيد اينجوري برميگردونه { Name = Bart, Age = 24}
وقتي از Equals استفاده مي کنيد مثلاً برا مثال بالا جواب False برميگردونه
Dim t = New With {.Name = "Bart", .Age = 24}
Dim u = New With {.Name = "Bart", .Age = 24}
Console.WriteLine(t.Equals(u))
چون Equals دوتا references رو باهم مقايسه ميکنه
حالا VB9 يه keyed anonymous types داره که با استفاده از اون ........
Dim t = New With {Key .Id = 1, .Name = "Bart", .Age = 24}
Dim u = New With {Key .Id = 1, .Name = "Anders", .Age = 47}
Console.WriteLine(t.Equals(u))
اينجوري Equals جوابه True برميگردونه و GetHashCode يه مقدارو
** از اين خاصيت برا LINQ هم استفاده ميشه
Dim res = From c In customers Select New With {c.Name, c.Age}