In C#, I can define an extension method for a generic array of type T like this:
public static T GetOrDefault(this T[] arr, int n)
{
if (arr.Len
You have to write the array type using 'backtick marks' - like this:
type 'a ``[]`` with
member x.GetOrDefault(n) =
if x.Length > n then x.[n]
else Unchecked.defaultof<'a>
let arr = [|1; 2; 3|]
arr.GetOrDefault(1) //2
arr.GetOrDefault(4) //0
Edit: The syntax type ``[]``<'a> with ...
seems to be allowed as well. In the F# source (prim-types-prelude.fs) you can find the following definition:
type ``[]``<'T> = (# "!0[]" #)
Good question. I can't figure out how to extend 'T[]
but you can take advantage of the fact that arrays implement IList<_>
to do:
type System.Collections.Generic.IList<'T> with
member x.GetOrDefault(n) =
if x.Count > n then x.[n]
else Unchecked.defaultof<'T>
let arr = [|1; 2; 3|]
arr.GetOrDefault(1) //2
arr.GetOrDefault(4) //0