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

时间:2016-01-27 16:56:32

标签: c# .net vb.net c#-to-vb.net

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

原始C#代码

using (var client = new HttpClient(new HttpClientHandler { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate })) 

转换后的VB.NET代码

Using client = New HttpClient(New HttpClientHandler With {Key .AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate})

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

错误位于'键'

最后一点注意事项:我大部分使用了可怕的代码转换器,所以我不确定' key'来自。

2 个答案:

答案 0 :(得分:5)

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

匿名类型

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

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

此处VB also allows you to add mutable (non-key) propertiesC# does not support

Key

因此,new MyClass { A = 1, B = 2 }关键字在这里非常重要。

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

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

VB:Key

此处设置了 MyClass 的现有属性,因此Key关键字无关紧要,因此不允许。

显然,你的C# - > VB转换器认为这是一个匿名类型,虽然它是一个对象初始化器。删除{{1}}关键字并向转换开发者发送错误报告。

答案 1 :(得分:2)

不确定Key的来源。

通过Instant VB运行此操作会产生以下结果,因此我认为Key不是必需的:

Option Infer On

Using client = New HttpClient(New HttpClientHandler With {.AutomaticDecompression = DecompressionMethods.GZip Or DecompressionMethods.Deflate})