有没有像我在C#中做的那样在F#中初始化WebHeaderCollection的好方法?
var wh = new WebHeaderCollection
{
{ "Content-Type", "application/json" }
};发布于 2018-08-21 08:18:38
C#代码对应于下面的F#,如果您在初始化集合时只需要在方法中使用它,那么它实际上看起来并不太差:
let wh = WebHeaderCollection()
wh.Add("Content-Type", "application/json")您可以定义各种帮助器来简化这一过程。如果您想要更好的方法,可以定义一个帮助器,它接受类名和要添加的项的列表,并通过静态成员约束调用Add方法(这也是C#编译器所做的):
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使用此帮助器,您可以按如下方式初始化集合:
let wh = create WebHeaderCollection ["Content-Type", "application/json"]也就是说,我可能只会直接调用Add方法,除非您有充分的理由不这样做。
如果您有一些更复杂的结构需要初始化,那么最好以不同的方式考虑这个问题,并定义两个经过F#区分的联合和记录,以一种很好的惯用F#方式对域进行建模,而不是直接创建.NET对象。然后,您将编写一个函数将F#域转换为.NET对象,但这只是一种转换(并且您可以使用漂亮的F#域来完成大部分工作)。
https://stackoverflow.com/questions/51939803
复制相似问题