“新某人类 { 键 .SomeProperty = SomeValue }' 在 C# -> VB 转换之后



我和我的一个同事都做编程。他用 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"来自哪里。

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

匿名类型

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 关键字并向转换器的开发人员发送错误报告。

不确定Key来自哪里。

通过 Instant VB 运行它会给出以下内容,因此它同意我的想法,即不需要Key

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

最新更新