从C#方法返回F#接口

时间:2014-09-22 15:29:38

标签: c# interface f# c#-to-f#

我正在将一些东西从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界面,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:6)

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#代码是否正确输入了类型,但这应该是一般的想法。