“新某人类 { 键 .SomeProperty = SomeValue }' 在 C# -> VB 转换之后
本文关键字:之后 转换 VB 新某人类 人类 新某 SomeValue SomeProperty | 更新日期: 2023-09-27 18:32:05
我和我的一个同事都做编程。他用 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})