当我使用 F# 读取public readonly
C# 程序集中定义的结构类型的成员时,我遇到了一个奇怪的错误。
// C#: compile to Lib.dll
namespace Lib
{
public class MyClass { public readonly int ReadonlyFoo; }
public struct MyStruct
{
public readonly int ReadonlyFoo;
public int WriteableFoo;
}
}
// F#: compile to Client.exe
open Lib
let myClass = new MyClass()
printfn "MyClass.ReadonlyFoo = %x" myClass.ReadonlyFoo
let myStruct = new MyStruct()
printfn "MyStruct.WriteableFoo = %x" myStruct.WriteableFoo
printfn "MyStruct.ReadonlyFoo = %x" myStruct.ReadonlyFoo
当我用 F# 1.9.6.16 编译 Client.exe 时,最后一行给出了错误:
"The address of the variable 'copyOfStruct' may not be used at this point"
在撰写本文时,网络是无用的。可以读取类的不可变成员,可以读取结构的可变成员,但不能读取结构的不可变成员,这似乎很奇怪。解决方法很简单,但我很好奇:这是编译器中的错误吗?
编辑:我向 fsbugs@microsoft.com 提交了错误报告