読者です 読者をやめる 読者になる 読者になる

F# の型拡張を使って定義したメソッドを C# から呼び出す

F# C#

Donさんに教えてもらいました。

リフレクションを使って呼び出すだけなのでC#限定というわけではないです。

using System.Reflection;
using Microsoft.FSharp.Reflection;

~ 略 ~

typeof(FSharpReflectionExtensions).GetTypeInfo()
    .GetMethod("FSharpType.IsRecord.Static")
    .Invoke(null, new object[] { typeof<string>, null });
// 第2引数のoptionを指定するつもりがないなら、.NET的にはnullでもOK

型名.メソッド名.Staticという形式になるらしい。 ILには存在するものの、C#がドット付きメソッドを呼び出せないのでこういう方法をとる必要があるようです。

使う機会はないでしょうがまぁ勉強になった、ということで。