VB.NET相当于匿名类型的C#对象初始化器

时间:2014-05-08 10:59:06

标签: c# vb.net types initialization

我对.NET类型系统的高级功能没有经验。我无法找到 zz 的类型(可以写​​什么而不是 var 。或 var 这里是最好的选择?)

string foo = "Bar";
int cool = 2;
var zz = new { foo, cool };    // Watches show this is Anonymous Type

但最重要的是,如何在VB.NET代码中实现等效(这是我真正需要的)。

Dim Foo As String = "Bar"
Dim Cool As Integer = 2
Dim zz = {Foo, Cool}    'This is not an equivalent of above, I'm getting an array

我搜索了几个C#源代码,使用了代码监视器并了解了 zz 在内部的看法,但我无法进行下一步。

(我的努力的目的与VB.NET中的this类似。)

1 个答案:

答案 0 :(得分:7)

您的代码甚至无法编译,OPTION STRICT设置为ON,强烈建议您使用。不能从String + Int32派生任何类型。如果你想要Object()

,它会编译
Dim zz As Object() = {Foo, Cool}

但是你想创建一个匿名类型,使用New With

Dim zz = New With {Foo, Cool}

http://msdn.microsoft.com/en-us/library/bb385125.aspx


使用.NET 4.7和Visual Basic 2017,您还可以使用ValueTuples名称:

Dim zz = (FooName:=foo, CoolName:=cool)    

现在您可以按名称访问元组项目:

int cool = zz.CoolName;

https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/tuples