我目前正与F#的C#代码进行互操作。
在F#中是否可以定义C#中的属性如下所示?
private Func<PropertyInfo, bool> OnIsSatisfiedByProperty { get; set; }
(在F#中,它不一定是Func<T, TResult>
,而是等价物。)
答案 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;;