2009-03-16 1 views
2

У меня есть F # переменная определяется следующим образомОбнуляемые значения не изменены при передаче в C# код по ссылке

let id = new Nullable<int>() 

и я передаю его от F # в функцию C#, которая принимает ref Nullable<int> и, впоследствии, присваивает ему значение (это в основном хранимый код процедуры, автоматически генерируемый Linq2Sql).

К сожалению, когда вызов функции завершается, переменная id по-прежнему не имеет значения (т. Е. Равно null). Я пробовал объявить его как mutable, но F # жалуется, что я не могу использовать изменяемые переменные в замыканиях.

Может кто-нибудь помочь? Благодаря!

ответ

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() 

(потенциально смотри также http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!677.entry)

 Смежные вопросы

  • Нет связанных вопросов^_^