c# - 将 C# 转换为 VB : New. .. 使用{只读属性}

标签 c# vb.net initialization dotnet-httpclient code-conversion

在尝试转换教程中的以下 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 一样写入只读属性。但是只读属性可以返回一个可以写入的对象。

您看到的是 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/

相关文章:

javascript - 如何解析 vb.net 中用一堆 document.write 编写的网页?

c# - 使用 CLR 存储过程可以解决哪些好问题?

c# - 将项目添加到列表中的递归算法

C# - user32.dll - GetWindowRect 问题

c# - 如何在现有 Azure MVC ASP.NET Web 应用程序上启用 "host in the cloud"

xml - 存储 XML 数据的优雅解决方案

c++ - 通过赋值初始化类对象

php - 初始化对象属性 - 如何正确执行

c++ - 向类的构造函数添加虚拟参数以解决调用歧义是否违反任何规则?

c# - 在命令行参数中传递新行?