我正在使用Microsoft.FSharp.Reflection.FSharpValue.MakeUnion
,这需要一个Reflection.UnionCaseInfo
和一个obj[]
(可以是空的)作为参数。
Type mismatch. Expecting a obj [] but given a string [] The type 'obj' does not match the type 'string'
但是,当调用一个函数的结果时,我得到
一个string[]
.
我可以为这种情况创建的最简单示例如下(我对此进行了测试,但由于标记为!!
.
let one (a:obj[]) = a |> Array.map (fun o->printfn "%A" o) |> ignore
one [|"a";"b";"c"|] // OK!
let str = [|"a";"b";"c"|] //the equivalent of my function return
one str//!!Type mismatch.
我不确定我是否打算将 string[] 转换/转换为 obj[] 或......好吧,如果我只是在做我不知道的其他错误。
编辑:实际问题如下所述
let split (by:string) (input:string) = System.Text.RegularExpressions.Regex.Split(input,by)
let buildArgs content =
match content with
| "" -> [||]
| _ -> content |> split " " //Type mismatch
这就是我曾经解决的问题:有更好的方法吗?
| _ -> content |> split " "|> Array.map (fun s->s:>obj)//make sure obj[] is returned
铸造和转换 (F#)作为参考
我也试过这个
let buildArgs content :obj[] = ... // Type mismatch
但这也给了我一个错误:
如果我不执行
Array.map
.