You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB中正确初始化类:C#转VB时Headers只读问题排查与解决

VB中HttpRequestMessageProperty Headers初始化报错问题

问题场景

我有一段实现WCF客户端消息拦截的C#代码,功能是在请求发送前给消息添加自定义HTTP头:

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
    HttpRequestMessageProperty httpRequestProperty = new HttpRequestMessageProperty()
    {
        Headers =
        {
            "test", "test"
        }
    };
    request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestProperty);
    return null;
}

尝试将其转换为VB代码时,写出了以下版本:

Public Function BeforeSendRequest(ByRef request As Message, ByVal channel As IClientChannel) As Object
    Dim httpRequestProperty As HttpRequestMessageProperty = New HttpRequestMessageProperty() With {
        .Headers = {
            {"test", "test"}
        }
    }
    request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestProperty)
    Return Nothing
End Function

但Visual Studio提示Headers是只读属性,无法通过这种方式初始化。明明C#的逻辑可以正常运行,想知道问题原因,以及VB里如何实现相同效果。

报错原因

C#和VB的对象/集合初始化语法存在关键差异:

  • C#中Headers = { "test", "test" }并非直接给只读属性赋值,而是集合初始化语法糖:编译器会识别到Headers是HttpRequestHeaders类型(实现了支持Add方法的集合接口),自动将大括号内的参数转换为对Headers.Add("test", "test")的调用,本质是调用集合的添加方法而非给属性赋值。
  • VB的With { .Headers = { {"test", "test"} } }会被编译器解析为直接对只读属性Headers进行赋值操作,而Headers本身没有setter,因此触发只读属性的报错——VB没有类似C#的这种“针对属性集合的初始化语法糖”,无法自动将赋值操作转换为集合的Add调用。

解决方案

在VB中,需要显式调用Headers.Add方法来添加头信息,代码如下:

Public Function BeforeSendRequest(ByRef request As Message, ByVal channel As IClientChannel) As Object
    ' 先实例化HttpRequestMessageProperty对象
    Dim httpRequestProperty As New HttpRequestMessageProperty()
    ' 显式调用Add方法添加HTTP头
    httpRequestProperty.Headers.Add("test", "test")
    ' 将属性添加到请求的Properties中
    request.Properties.Add(HttpRequestMessageProperty.Name, httpRequestProperty)
    Return Nothing
End Function

这种写法完全等价于原C#代码的功能,通过直接操作集合对象的方法来添加头信息,避开了对只读属性的赋值操作。

内容的提问来源于stack exchange,提问作者BladeZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:12:34