I For Fun F # implementiert haben und davon profitieren die Designing for Correctness example in einer F # DLL, die wie folgt beginnt:Wie F # verwenden -defined Typen innerhalb eines C# Projekt
module Foo =
type Item = { Price : double; Name : string }
type EmptyState = NoItems
type ActiveState = { UnpaidItems : Item list }
type CompletedState = { PaidItems : Item list; PurchaseDate : System.DateTime }
type Cart =
| EmptyCart of EmptyState
| ActiveCart of ActiveState
| CompletedCart of CompletedState
....
let addItemToCart cart item =
match cart with
| EmptyCart state -> state.Add item
| ActiveCart state -> state.Add item
| CompletedCart state ->
printfn "ERROR: The cart is paid for"
cart
...
type Cart with
static member NewCart = Cart.EmptyCart NoItems
member this.Add = addItemToCart this
....
Ich versuche jetzt eine einfach zu erstellen C# Konsolen-App, um es zu benutzen. Meine Erwartung ist, dass ich so etwas tun kann:
var myCart = Foo.Cart.NewCart(); // implicitly creates an EmptyCart
var item = new Foo.Item(123.45, "something");
myCart.Add(item); // adds a new item, changing to ActiveCart
// do other stuff, like adding more items, deleting them, then completing the cart
jedoch Add
ist keine Methode:
Intellisense sagt mir, dass Add
Microsoft.FSharp.Core.FSharpFunc<Foo.Item,Foo.Cart> Cart.Add
ist.
Ich bin mir nicht sicher, ob ich etwas falsch gemacht habe, eine Anmerkung fehlt oder ob ich die Interoperabilität von C# und F # falsch verstehe. Gibt es tatsächlich eine Möglichkeit, diesen F # -Code nahtlos in C# zu verwenden?
Welche Mitglieder sagen IntelliSense, dass 'FSharpFunc' * * hat? –
'Mitglied this.Add x = addItemToCart dieses x' – PetSerAl
@MarkSeann: Nicht sicher, ich verstehe die Frage, aber' myCart' hat 'Add',' Display', 'IsActiveCart',' IsCompletedCart', 'IsEmptyCart',' Entfernen 'und' Tag' Eigenschaften. Mitgliedsfunktionen scheinen nur diejenigen zu sein, die für Objekte intrinsisch sind ('ToString',' Equals', usw.). – user655321