匹配数据类型时的约束不匹配错误
我试图根据包含的元素的类型(String,Int,Datetime等)处理字典的内容。以下是一个小测试片段,它加载一些测试数据,然后按类型提取。
但是,我得到以下约束不匹配错误,我不明白 - 任何想法?
错误信息:
unmapdict.fsx(29,23):错误FS0193:类型约束不匹配。
“String”类型与“Type”类型不兼容
open System
open System.Collections.Generic
// Type for dict entries
type dStruct = {
ftype: Type;
fvalue:obj;
}
let main() =
printfn "n>>>>>> Extract Dictionary Elements <<<<< n"
let ddict = new Dictionary<string, dStruct>()
let str = "String Data"
let rstring = { ftype=str.GetType(); fvalue=str ;}
ddict.Add("String", rstring)
let intn = 999
let rint32 = { ftype=intn.GetType(); fvalue=intn ;}
ddict.Add("Int32", rint32)
let rdatetime = {ftype=System.DateTime.Now.GetType(); fvalue=System.DateTime.Now}
ddict.Add("DateTime", rdatetime)
// Extract dict value elements; emumerate data types
ddict
|> Seq.map ( fun (KeyValue(k,v)) -> v)
|> Seq.iter (fun v ->
// Error occurs here >>
match v.ftype with
| :?System.String -> printfn "String Found ";
| :?System.Int32 -> printfn "Integer Found ";
| :?System.DateTime -> printfn "DateTime Found ";
|_ -> printfn "Unmatched Element"
// printfn "Dict: ftype: %A; fvalue: %A" v.ftype v.fvalue
)
printfn "n>>>>>> F# Done <<<<< n"
main()
没有找到相关结果
已邀请:
2 个回复
疾很毋悲
类型(无论如何都是误导性的,因为它不是结构)。在相关的说明中,您的类型测试模式(
等)不起作用,因为您正在测试类
的实例,当您应该测试您实际关心的实例时。那是:
降女陷费券
与类不同。相反,它是类
的一个实例。此外,
不能用于模式匹配(除非我们定义特殊的活动模式),但我们可以比较相等。 如果您更改这样的代码,它将起作用: