将 C# 转换为 VB:新...使用{只读 属性}
Converting C# to VB: New... With {Read-Only Property}
尝试从教程中转换以下 C# 代码(手动转换,因为我尝试过的交叉编译器似乎无法执行此操作):
httpClient = new HttpClient(unrelated args)
{
DefaultRequestHeaders =
{
Accept = { MediaTypeWithQualityHeaderValue.Parse("text/json") }
}
}
我能得到的最接近的是:
Dim httpClient As New HttpClient(unrelated args) With
{
.DefaultRequestHeaders [=[New HttpRequestHeaders]] [With]
{
.Accept = {MediaTypeWithQualityHeaderValue.Parse("text/json")
}
}
(我尝试了括号中值的各种组合)
无论我尝试什么,我能得到的最好的就是错误
Property DefaultRequestHeaders
is ReadOnly
.
我已经确认 .DefaultRequestHeaders
和 .Accept
在 VB 和 C# 中都是只读的。显然 C# 能够在初始化时写入 ReadOnly 属性? VB 是否也无法做到这一点,或者我是否缺少一些语法的细微差别才能做到这一点?如果不能在初始化时设置它,其他一些设置实际值的方法可能会起作用;不幸的是,我没有看到公开它的构造函数,所以我没有看到任何其他方法来实现这一点,但我也欢迎按照这些思路提出任何建议。
I have confirmed that .DefaultRequestHeaders and .Accept are ReadOnly in both VB and C#. Apparently C# is able to write to ReadOnly properties at initialization?
没有。 C# 不能像 VB 一样写入只读属性。但是只读属性可以 return 一个可以写入的对象。
您正在查看的是 C# 集合初始值设定项。它们允许您在一行中创建集合,而无需一次又一次地调用 Add
。
VB也有collection initialzers,但语法有很大不同。也就是说,并不是 100% 有必要这样做,尤其是当您只向集合中添加一个项目时。
Dim httpClient As New HttpClient(args As unrelated) 'Assuming unrelated is a type (not sure)
httpClient.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("text/json"))
我才发现Accept
是一个集合。我没有尝试设置整个集合,而是在创建变量后调用 Add
,它现在似乎可以正常工作了。
显然 VB 不支持属性的嵌套对象和集合初始值设定项。 2011 年曾有过支持它的讨论,但我想它没有进展。目前的讨论好像是2017年7月的:
尝试从教程中转换以下 C# 代码(手动转换,因为我尝试过的交叉编译器似乎无法执行此操作):
httpClient = new HttpClient(unrelated args)
{
DefaultRequestHeaders =
{
Accept = { MediaTypeWithQualityHeaderValue.Parse("text/json") }
}
}
我能得到的最接近的是:
Dim httpClient As New HttpClient(unrelated args) With
{
.DefaultRequestHeaders [=[New HttpRequestHeaders]] [With]
{
.Accept = {MediaTypeWithQualityHeaderValue.Parse("text/json")
}
}
(我尝试了括号中值的各种组合)
无论我尝试什么,我能得到的最好的就是错误
Property
DefaultRequestHeaders
isReadOnly
.
我已经确认 .DefaultRequestHeaders
和 .Accept
在 VB 和 C# 中都是只读的。显然 C# 能够在初始化时写入 ReadOnly 属性? VB 是否也无法做到这一点,或者我是否缺少一些语法的细微差别才能做到这一点?如果不能在初始化时设置它,其他一些设置实际值的方法可能会起作用;不幸的是,我没有看到公开它的构造函数,所以我没有看到任何其他方法来实现这一点,但我也欢迎按照这些思路提出任何建议。
I have confirmed that .DefaultRequestHeaders and .Accept are ReadOnly in both VB and C#. Apparently C# is able to write to ReadOnly properties at initialization?
没有。 C# 不能像 VB 一样写入只读属性。但是只读属性可以 return 一个可以写入的对象。
您正在查看的是 C# 集合初始值设定项。它们允许您在一行中创建集合,而无需一次又一次地调用 Add
。
VB也有collection initialzers,但语法有很大不同。也就是说,并不是 100% 有必要这样做,尤其是当您只向集合中添加一个项目时。
Dim httpClient As New HttpClient(args As unrelated) 'Assuming unrelated is a type (not sure)
httpClient.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("text/json"))
我才发现Accept
是一个集合。我没有尝试设置整个集合,而是在创建变量后调用 Add
,它现在似乎可以正常工作了。
显然 VB 不支持属性的嵌套对象和集合初始值设定项。 2011 年曾有过支持它的讨论,但我想它没有进展。目前的讨论好像是2017年7月的: