我正在将一些东西从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界面,有没有办法做到这一点?
答案 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#代码是否正确输入了类型,但这应该是一般的想法。