2009-03-16 4 views
2

J'ai une variable F # définie comme suitvaleurs nullables ne codent sont modifiés lorsqu'il est passé en C pas de # par référence

let id = new Nullable<int>() 

et je passe à partir de F # en fonction de C# qui prend un ref Nullable<int> et, par la suite, lui attribue une valeur (il s'agit essentiellement d'un code de procédure stockée généré automatiquement par Linq2Sql).

Malheureusement, lorsque l'appel de fonction se termine, ma variable id n'a toujours aucune valeur (c'est-à-dire est nulle). J'ai essayé de le déclarer comme mutable mais F # se plaint que je ne peux pas utiliser des variables mutables dans les fermetures.

Quelqu'un peut-il aider? Merci!

Répondre

3

C#:

namespace TestLibrary 
{ 
    public class TakesRefNullableInt 
    { 
     public void Foo(ref Nullable<int> ni) 
     { 
      ni = null; 
     } 
    } 
} 

F #:

// mutable version 
let Main() = 
    let mutable ni = new System.Nullable<int>(42) 
    let tfni = new TestLibrary.TakesRefNullableInt() 
    printfn "%A" ni 
    tfni.Foo(&ni) 
    printfn "%A" ni 
Main() 

// 'ref' version 
let Main2() = 
    let ni = ref(new System.Nullable<int>(42)) 
    let tfni = new TestLibrary.TakesRefNullableInt() 
    printfn "%A" !ni 
    tfni.Foo(ni) 
    printfn "%A" !ni 
Main2() 

(voir potentiellement aussi http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!677.entry)

Questions connexes