If you were to define some extension methods, properties in an assembly written in F#, and then use that assembly in C#, would you see the defined extensions in C#?
If so, that would be so cool.
[<System.Runtime.CompilerServices.Extension>] module Methods = [<System.Runtime.CompilerServices.Extension>] let Exists(opt : string option) = match opt with | Some _ -> true | None -> false
This method could be used in C# only by adding the namespace (using using) to the file where it will be used.
if (p2.Description.Exists()) { ...}
Here is a link to the original blogpost.
Answering question in comments "Extension Static Methods":
namespace ExtensionFSharp module CollectionExtensions = type System.Linq.Enumerable with static member RangeChar(first:char, last:char) = {first .. last}
In F# you call it like so:
open System.Linq open ExtensionFSharp.CollectionExtensions let rangeChar = Enumerable.RangeChar('a', 'z') printfn "Contains %i items" rangeChar.CountItems
In C# you call it like so:
using System; using System.Collections.Generic; using ExtensionFSharp; class Program { static void Main(string[] args) { var method = typeof (CollectionExtensions).GetMethod("Enumerable.RangeChar.2.static"); var rangeChar = (IEnumerable<char>) method.Invoke(null, new object[] {'a', 'z'}); foreach (var c in rangeChar) { Console.WriteLine(c); } } }
Now, give me my freaking medal!
Despite my other answer, I did just try this with the F# CTP (on VS shell) and C# Express from my box at home (all free dev tools!), and this works:
F#
#light namespace MyFSharp // C# way [<System.Runtime.CompilerServices.Extension>] module ExtensionMethods = [<System.Runtime.CompilerServices.Extension>] let Great(s : System.String) = "Great" // F# way type System.String with member this.Awesome() = "Awesome" let example = "foo".Awesome()
C#
using System; using MyFSharp; // reference the F# dll class Program { static void Main(string[] args) { var s = "foo"; //s.Awesome(); // no Console.WriteLine(s.Great()); // yes } }
I was not aware you could do this; nifty. Credit to @alex.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With