C# - > VB转换后`New SomeClass {Key .SomeProperty = SomeValue}`中的语法错误

dwb*_*dwb 1 .net c# vb.net c#-to-vb.net

我和我的同事都做编程.他在C#上创建了一个类,我正在努力将其转换为VB.NET.除了单行之外,我得到全班转换,此时我无法弄明白,所以想到一副新鲜的眼睛可能能找到我的错误.

原始C#代码

using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })) 
Run Code Online (Sandbox Code Playgroud)

转换VB.NET代码

Using client = New HttpClient(New HttpClientHandler With {Key .AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate})
Run Code Online (Sandbox Code Playgroud)

错误 在对象初始化中初始化的字段或属性的名称必须以"."开头.

错误位于"密钥"下

最后一点:我使用了一个可怕的代码转换器,所以我不确定'key'来自哪里.

Hei*_*nzi 5

有两个概念具有相似的语法但不同的语义:

匿名类型

C#: new { A = 1, B = 2 }

VB: New With { Key .A = 1, Key .B = 2 }

在这里,VB 允许您添加可变(非键)的属性,其中C#不支持:

New With { Key .A = 1, Key .B = 2, .SomeMutableProperty = 3 }

因此,Key关键字在这里很重要.

命名类型的对象初始值设定项

C#: new MyClass { A = 1, B = 2 }

VB: New MyClass With { .A = 1, .B = 2 }

这里,MyClass的现有属性已设置,因此Key关键字无关紧要,因此不允许.


显然,你的C# - > VB转换器认为这是一个匿名类型,虽然它是一个对象初始化器.删除Key关键字并将错误报告发送给转换器的开发人员.