Обнуляемые значения не изменяются при передаче в код C # по ссылке - PullRequest
2 голосов
/ 16 марта 2009

У меня есть переменная F #, определенная следующим образом

let id = new Nullable<int>()

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

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

Может кто-нибудь помочь? Спасибо!

1 Ответ

3 голосов
/ 16 марта 2009

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)

...