从C#方法返回F#接口

本文关键字:接口 返回 方法 | 更新日期: 2023-09-27 18:24:06

我正在从F#到C#重新编码一些东西,遇到了一个问题。

在F#的例子中,我有这样的东西:

let foo (x:'T) =
    // stuff
    { new TestUtil.ITest<'T[], 'T[]> with
        member this.Name input iters = "asdfs"
        member this.Run input iters = run input iters
      interface IDisposable with member this.Dispose() = () }

现在在我的C#版本中,我有。。

public class Derp
{
    // stuff
    public TestUtil.ITest<T, T> Foo<T>(T x)
    {
        // ???
        // TestUtil.ITest is from an F# library
    }
}

我将如何在C#中重新创建F#功能?有没有什么方法可以在不完全重新定义C#中的ITest接口的情况下做到这一点?

从C#方法返回F#接口

C#不支持定义这样的接口的匿名实现。或者,您可以声明一些内部类并返回它。示例:

public class Derp
{
    class Test<T> : TestUtil.ITest<T, T>
    {
        public string Name(T[] input, T[] iters) 
        {
            return "asdf";
        }
        public void Run(T[] input, T[] iters)
        {
             run(input, iters);
        }
        public void Dispose() {}
    }
    public TestUtil.ITest<T, T> Foo<T>(T x)
    {
         //stuff
         return new Test<T>();
    }
}

请注意,我不确定F#代码的类型是否正确,但这应该是一般的想法。

相关文章: