需要帮助将 C# 转换为 F#

Need help converting C# to F#

我想知道如何将此代码逐行从 C# 转换为 F#。我不想使用任何类型的 F# 习惯用法或类似的东西。我正在尝试了解如何在 F# 中进行枚举和反射。

using System.Linq;

namespace System.Collections.Generic
{
    public static class EnumerableExtensions
    {
        private static readonly Random random;
        static EnumerableExtensions()
        {
            random = new Random();
        }
        public static T Random<T>(this IEnumerable<T> input)
        {
            return input.ElementAt(random.Next(input.Count()));
        }
    }
}

您可以将扩展定义为类型中的静态方法,但必须使用 Extension 属性标记它们。直接重写您的 C# 代码将是:

open System.Runtime.CompilerServices

[<Extension>]
type EnumerableExtensions() =
  static let rnd = System.Random()
  [<Extension>]
  static member Random(input:seq<_>) = 
    input |> Seq.item (rnd.Next(Seq.length input))

[1;2;3].Random()