2016-06-02 6 views
6

ho il seguente codice F # per gestire un evento Gtk.TreeView:Chiamare un metodo di C# sovraccarico di parametri fuori da F #

tree.CursorChanged.Add(fun (e : EventArgs) -> 
     let selection = tree.Selection 
     let mutable iter = new TreeIter() 
     if selection.GetSelected(&iter) then 
     Console.WriteLine("Path of selected row = {0}", model.GetPath(iter)) 
    ) 

selection.GetSelected ha due sovraccarichi, con le firme

bool GetSelected(out TreeIter, out ITreeModel) 

e

bool GetSelected(out TreeIter) 

che mi impedisce di utilizzare la versione tuple come descritto in this post:

let selection = tree.Selection 
match selection.GetSelected() with 
| true, iter -> // success 
| _ -> // failure 

Esiste un modo per specificare che GetSelected sovraccarico voglio con quest'ultimo la sintassi?

Modifica: Per chiarire la domanda, so quale firma del metodo desidero; Non so come specificarlo. Per esempio, ho provato questo, che non ha funzionato:

let f : (byref<TreeIter> -> bool) = selection.GetSelected 
match f() with 
| true, iter -> // success 
| _ -> // failure 
+0

come circa '| vero, iter, _ -> // successo'? – ildjarn

+0

no, non riesce con l'errore di risoluzione del metodo: Un sovraccarico univoco per il metodo 'GetSelected' non può essere determinato in base alle informazioni sul tipo prima di questo punto del programma. Potrebbe essere necessaria un'annotazione di tipo. Candidati: TreeSelection.GetSelected (iter: byref ): bool, TreeSelection.GetSelected (modello: byref , iter: byref ): bool –

+0

Il messaggio di errore non ti ha dato la firma del tipo che devi applicare alla funzione che desideri ? 'TreeSelection.GetSelected (iter: byref ): bool' –

risposta

6

Penso

match selection.GetSelected() : bool*_ with 
... 

dovrebbe funzionare.

+0

perfetto, grazie! avrei dovuto capire che avevo bisogno di specificare la firma f #, non quella C#. –

Problemi correlati