小编Raf*_*eis的帖子

F#:实现“ try cast”功能,参数化“ subtype of”约束不起作用

我正在尝试在F#中实现“尝试转换”运算符。约束的子类型不起作用。

例如,我想在C#中做的事情:

static A TryCast<TSuper, TSub, A>(
    Func<TSub, A> f,
    Func<TSuper, A> g,
    TSuper x)
    where TSub : TSuper
    =>
    x is TSub sub ? f(sub) : g(x);
Run Code Online (Sandbox Code Playgroud)

F#中的等效项应为:

let tryCast<'super, 'sub when 'sub :> 'super>
    (f : 'sub -> 'a) (g: 'super -> 'a) (x : 'super) : 'a =
        match x with
        | :? 'sub as sub -> f sub
        | x              -> g x
Run Code Online (Sandbox Code Playgroud)

要么

... 
if x :? 'sub then f (x :?> 'sub) else g …
Run Code Online (Sandbox Code Playgroud)

c# f# c#-to-f#

5
推荐指数
0
解决办法
84
查看次数

标签 统计

c# ×1

c#-to-f# ×1

f# ×1