通过引用传递到 C# 代码时,可空值不会被修改

发布于 2024-07-16 02:38:39 字数 304 浏览 5 评论 0原文

我有一个 F# 变量定义如下

let id = new Nullable<int>()

,我将其从 F# 传递到一个 C# 函数,该函数采用 ref Nullable ,然后为其分配一个值(它基本上是自动存储过程代码)由 Linq2Sql 生成)。

不幸的是,当函数调用退出时,我的 id 变量仍然没有值(即为 null)。 我尝试将其声明为可变的,但 F# 抱怨我无法在闭包中使用可变变量。

有人可以帮忙吗? 谢谢!

I have an F# variable defined as follows

let id = new Nullable<int>()

and I am passing it from F# into a C# function that takes a ref Nullable<int> and, subsequently, assigns it a value (it's basically stored procedure code auto-generated by Linq2Sql).

Unfortunately, when the function call exits, my id variable still has no value (i.e., is null). I've tried declaring it as mutable but F# complains that I cannot use mutable variables in closures.

Can someone help? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月下伊人醉 2024-07-23 02:38:39

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)

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

(potentially see also http://lorgonblog.spaces.live.com/blog/cns!701679AD17B6D310!677.entry)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文