FSharp-Code ist wie folgt strukturiert (ich habe nicht die Kontrolle über die Quelle).So rufen Sie F # -Typ-Erweiterungen (statische Elementfunktionen) von C#
namespace FS
[<AbstractClass; Sealed>]
type TestType() =
static member IrrelevantFunction() =
0
[<AutoOpen>]
module Extensions =
type TestType with
//How do we call this from C#
static member NeedToCallThis() =
0
module Caller =
let CallIt() =
//F# can call it
TestType.NeedToCallThis()
C# Aufruf-Code ist als
public void Caller()
{
TestType.IrrelevantFunction();
//We want to call this
//TestType.NeedToCallThis();
//Metadata:
//namespace FS
//{
// [Microsoft.FSharp.Core.AutoOpenAttribute]
// [Microsoft.FSharp.Core.CompilationMappingAttribute]
// public static class Extensions
// {
// public static int TestType.NeedToCallThis.Static();
// }
//}
//None of these compile
//TestType.NeedToCallThis();
//Extensions.TestType.NeedToCallThis.Static();
//Extensions.TestType.NeedToCallThis();
}
Warum nicht einfach einen Reflektor verwenden, um herauszufinden, was der volle Name der Methode ist? ILSpy sollte gut funktionieren :) – Luaan
@Luaan Selbst wenn man den vollen Namen kennt, ist das nicht genug - C# kann es nicht direkt benutzen. Die Frage selbst * zeigt * den vollständigen Namen in den Kommentaren. –
@ReedCopsey Das ist eine nützliche Information, die dem OP natürlich viel Zeit ersparen wird: P Es ist ein bisschen schade, dass C# keine in Anführungszeichen gesetzten Bezeichner erlaubt ... für Interop. – Luaan