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

仅含get访问器的HttpRequestMessage.Headers如何用集合初始化语法?

问题解答

1. 这种语法是什么?

这是C#里的集合初始化器语法糖,属于「对象初始化器中对已有集合的初始化」,不是创建新集合对象。

你看到的Headers = { { ... }, { ... } },本质上不是给Headers属性赋值(毕竟它只有get访问器,确实不能直接赋值),而是编译器帮你做了两件事:

  • 调用request.Headers的getter,拿到已存在的HttpRequestHeaders实例(你的源码里能看到,第一次访问时会懒加载创建HttpRequestHeaders对象)
  • 对这个实例多次调用Add方法,每个{ key, value }对应一次Add(key, value)调用

2. 为什么只读属性能这么用?

因为你根本没给Headers属性赋值——你只是通过属性的getter拿到它返回的集合对象,然后对这个对象进行操作。只要这个集合对象是可变的(比如提供了Add方法),就能用这种初始化器语法来批量添加元素。

3. 等价的展开代码

编译器会把你写的代码转换成下面这样:

var request = new HttpRequestMessage();
// 先获取Headers实例(懒加载创建)
var headersCollection = request.Headers;
// 调用Add方法添加头
headersCollection.Add(HttpRequestHeader.Authorization.ToString(), Token);
headersCollection.Add(HttpRequestHeader.ContentType.ToString(), "multipart/form-data");
// 其他属性赋值
request.Method = HttpMethod.Post;
request.RequestUri = new Uri(endpointUrl);
request.Content = content;

补充:关于嵌套花括号的写法

这种{ { key, value } }的格式,是因为HttpRequestHeaders提供了接受两个参数的Add(string name, string value)方法。C#集合初始化器支持匹配多参数的Add方法,用嵌套花括号来传递多个参数。如果是单参数的Add,直接写{ 元素 }就行。

内容的提问来源于stack exchange,提问作者Mario Š.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:11:15