如何在F#中实现调用基类构造函数的结构相等字典多构造函数重载?
F# 实现带结构相等性的字典(对应C#版本)
你的F#代码编译失败是因为错误使用了对象表达式语法来定义继承类的构造函数。F#中定义命名继承类的构造函数时,需直接通过inherit关键字调用基类对应构造,而非用{ inherit ... }的匿名对象写法。
正确的F#实现代码
type StructuralDictionary<'key, 'value when 'key : equality> = // 无参构造,调用基类无参构造 new () = inherit Dictionary<'key, 'value>() // 接受IDictionary的构造,调用基类对应构造 new (dictionary: IDictionary<'key, 'value>) = inherit Dictionary<'key, 'value>(dictionary) // 接受IEqualityComparer的构造,调用基类对应构造 new (comparer: IEqualityComparer<'key>) = inherit Dictionary<'key, 'value>(comparer)
说明
- F#的
when 'key : equality约束等价于C#的where Key : IEquatable<Key>,确保键类型支持结构相等性检查。 - 每个构造函数都直接映射到基类
Dictionary<'key, 'value>的对应重载,和你提供的C#实现逻辑完全一致。
内容的提问来源于stack exchange,提问作者farlee2121
相关产品推荐
相关产品推荐

