Ich erhalte einen seltsamen Fehler, wenn ich F# verwende, um ein public readonly
-Element eines in einer C#-Assembly definierten Strukturtyps zu lesen.
// C#: Kompilieren in Lib.dll
namespace Lib
{
public class MyClass { public readonly int ReadonlyFoo; }
public struct MyStruct
{
public readonly int ReadonlyFoo;
public int WriteableFoo;
}
}
// F#: Kompilieren in 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
Wenn ich Client.exe mit F# 1.9.6.16 kompiliere, gibt die letzte Zeile den Fehler aus:
"Die Adresse der Variablen 'copyOfStruct' darf an dieser Stelle nicht verwendet werden"
Das Internet ist nutzlos zum Zeitpunkt dieser Niederschrift. Es scheint seltsam, dass man ein unveränderliches Element einer Klasse lesen kann und man ein veränderliches Element einer Struktur lesen kann, aber man kann kein unveränderliches Element einer Struktur lesen. Ein Workaround ist jedoch leicht genug, aber ich frage mich: ist das ein Fehler im Compiler?
Bearbeitung: Ich habe einen Fehlerbericht an fsbugs@microsoft.com gesendet