首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebHeaderCollection便捷初始化器F#

WebHeaderCollection便捷初始化器F#
EN

Stack Overflow用户
提问于 2018-08-21 07:42:37
回答 1查看 56关注 0票数 1

有没有像我在C#中做的那样在F#中初始化WebHeaderCollection的好方法?

代码语言:javascript
复制
var wh = new WebHeaderCollection
{
    { "Content-Type", "application/json" }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 08:18:38

C#代码对应于下面的F#,如果您在初始化集合时只需要在方法中使用它,那么它实际上看起来并不太差:

代码语言:javascript
复制
let wh = WebHeaderCollection()
wh.Add("Content-Type", "application/json")

您可以定义各种帮助器来简化这一过程。如果您想要更好的方法,可以定义一个帮助器,它接受类名和要添加的项的列表,并通过静态成员约束调用Add方法(这也是C#编译器所做的):

代码语言:javascript
复制
let inline create ctor list : ^T = 
  let res = ctor()
  for k, v in list do
    (^T : (member Add : ^K * ^V -> unit) (res, k, v)) 
  res

使用此帮助器,您可以按如下方式初始化集合:

代码语言:javascript
复制
let wh = create WebHeaderCollection ["Content-Type", "application/json"]

也就是说,我可能只会直接调用Add方法,除非您有充分的理由不这样做。

如果您有一些更复杂的结构需要初始化,那么最好以不同的方式考虑这个问题,并定义两个经过F#区分的联合和记录,以一种很好的惯用F#方式对域进行建模,而不是直接创建.NET对象。然后,您将编写一个函数将F#域转换为.NET对象,但这只是一种转换(并且您可以使用漂亮的F#域来完成大部分工作)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51939803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档