4 people like it.
Like the snippet!
.NET Interop
Facilities for interop with languages supporting null.
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
[<AutoOpen>]
module Interop =
let inline (===) a b = obj.ReferenceEquals(a, b)
let inline (<=>) a b = not (a === b)
let inline isNull value = value === null
let inline nil<'T> = Unchecked.defaultof<'T>
let inline safeUnbox value = if isNull value then nil else unbox value
let (|Null|_|) value = if isNull value then Some() else None
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
|
type Foo() = class end
type Test() =
member this.AcceptFoo(foo:Foo) = //passed from C#
if isNull foo then nullArg "foo"
else ()
member this.AcceptFoo2(foo:Foo) = //passed from C#
match foo with
| Null -> nullArg "foo"
| _ -> ()
member this.AcceptBoxedFoo(boxedFoo:obj) =
let foo : Foo = safeUnbox boxedFoo
()
member this.ReturnFoo() : Foo = //returning to C#
if (true) then new Foo()
else nil
|
Multiple items
type AutoOpenAttribute =
inherit Attribute
new : unit -> AutoOpenAttribute
new : path:string -> AutoOpenAttribute
member Path : string
Full name: Microsoft.FSharp.Core.AutoOpenAttribute
--------------------
new : unit -> AutoOpenAttribute
new : path:string -> AutoOpenAttribute
val a : 'a
val b : 'b
type obj = System.Object
Full name: Microsoft.FSharp.Core.obj
System.Object.ReferenceEquals(objA: obj, objB: obj) : bool
val not : value:bool -> bool
Full name: Microsoft.FSharp.Core.Operators.not
val isNull : value:'a -> bool
Full name: Script.Interop.isNull
val value : 'a
val nil<'T> : 'T
Full name: Script.Interop.nil
module Unchecked
from Microsoft.FSharp.Core.Operators
val defaultof<'T> : 'T
Full name: Microsoft.FSharp.Core.Operators.Unchecked.defaultof
val safeUnbox : value:'a -> 'b
Full name: Script.Interop.safeUnbox
val unbox : value:obj -> 'T
Full name: Microsoft.FSharp.Core.Operators.unbox
union case Option.Some: Value: 'T -> Option<'T>
union case Option.None: Option<'T>
Multiple items
type Foo =
new : unit -> Foo
Full name: Script.Foo
--------------------
new : unit -> Foo
Multiple items
type Test =
new : unit -> Test
member AcceptBoxedFoo : boxedFoo:obj -> unit
member AcceptFoo : foo:Foo -> unit
member AcceptFoo2 : foo:Foo -> unit
member ReturnFoo : unit -> Foo
Full name: Script.Test
--------------------
new : unit -> Test
val this : Test
member Test.AcceptFoo : foo:Foo -> unit
Full name: Script.Test.AcceptFoo
val foo : Foo
val nullArg : argumentName:string -> 'T
Full name: Microsoft.FSharp.Core.Operators.nullArg
member Test.AcceptFoo2 : foo:Foo -> unit
Full name: Script.Test.AcceptFoo2
active recognizer Null: 'a -> unit option
Full name: Script.Interop.( |Null|_| )
member Test.AcceptBoxedFoo : boxedFoo:obj -> unit
Full name: Script.Test.AcceptBoxedFoo
val boxedFoo : obj
member Test.ReturnFoo : unit -> Foo
Full name: Script.Test.ReturnFoo
More information