从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#不支持定义这样的接口的匿名实现。或者,您可以声明一些内部类并返回它。示例:
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#代码的类型是否正确,但这应该是一般的想法。