How to call F # type extensions (static member functions) from C #

The FSharp code is structured as follows (I do not control the source code).

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 # call code is as follows

 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(); } 
+5
c # f #
source share
1 answer

I do not believe that a method can be called directly from C # without using reflection, since the name of the compiled method is not a valid method name in C #.

Using reflection, you can call it through:

 var result = typeof(FS.Extensions).GetMethod("TestType.NeedToCallThis.Static").Invoke(null,null); 
+7
source share

All Articles