我和我的同事都做编程。他在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'来自。
答案 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) properties,C# 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})