在尝试转换教程中的以下 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 一样写入只读属性。但是只读属性可以返回一个可以写入的对象。
您看到的是 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"))
关于c# - 将 C# 转换为 VB : New. .. 使用{只读属性},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631834/