如何在f#中创建字典,其中value是“generic”

时间:2014-11-17 15:13:13

标签: f# polymorphism

我是f#初学者。

我想创建某种字典,其中适用以下内容:

  1. 键是一个字符串
  2. 该值是某种通用对象
  3. E.g。考虑以下使用c#库的f#脚本提取,其中两个c#类(学生和教师)继承自公共基础c#class Person:

    #r @"D:\Temp\MyCSharpLib.dll"
    
    open MyCSharpLib
    
    let student = Student() // Student inherits from Person
    let teacher = Teacher() // Teacher inherits from Person
    
    let eventStream = Map.empty.Add("Key1", student).Add("Key2", teacher)
    

    我试图使用Map来执行此操作,但由于编译器期望所有值都是Student类型,因此出现错误。

    有没有办法在f#中执行此操作?

1 个答案:

答案 0 :(得分:4)

事实上,在这种情况下,F#无法猜测初始地图中您实际上想要的是Map<string, Person>而不是Map<string, Student>。您可以明确指出:

let eventStream = Map.empty<_,Person>.Add("Key1", student).Add("Key2", teacher)