F#中的Func <t,tresult =“”>属性</t,>

时间:2013-12-02 09:59:18

标签: c# f#

我目前正与F#的C#代码进行互操作。

在F#中是否可以定义C#中的属性如下所示?

private Func<PropertyInfo, bool> OnIsSatisfiedByProperty { get; set; }

(在F#中,它不一定是Func<T, TResult>,而是等价物。)

2 个答案:

答案 0 :(得分:5)

如果您需要与C#中的类型互操作,那么您希望它是Func<T>而不是FSharpFunc,它具有额外的元数据,例如非null规定[as我之前的评论和@John Palmer的回答最终成为了]。因此,使用对象初始化程序初始化的最短的类似实际等效项是:

type MyType()=
    member val public OnIsSatisfiedByProperty : Func<PropertyInfo,bool> = null with get,set

或者你可以走下去的路线:

type MyType()=
    [<DefaultValue()>]val mutable OnIsSatisfiedByProperty : Func<System.Reflection.PropertyInfo,bool> 

但是我的快速搞乱让我需要在这种情况下使用显式的set / get方法。

(顺便说一句,我知道这个答案只是因为偶然的几分钟,fixture.Inject( fun () -> !value)的工作方式与fixture.Inject<Func<MyValue>>( fun () -> !value)不同!)

答案 1 :(得分:4)

我认为等价物就像是

type test() = 
        member val private OnIsSatisfiedByProperty:PropertyInfo -> bool = (fun _ -> true) with get,set;;