如何在C#中表示Golang的接口{}?

时间:2014-01-15 16:17:53

标签: c# function generics interface go

我正在尝试将一些Go代码转换为C#。在Go中,例如:

type MyType interface{}

这类似于C#中的object还是MyType<T>

在Go代码中,有一个这样的接口数组,每个接口返回一个具有不同参数的函数。

我可以在C#中返回List of Funcs,但动态参数就是问题。

我在C#中表示这个问题。需要一些指导才能找到正确的道路。

1 个答案:

答案 0 :(得分:1)

到目前为止,最好的选择是完全避免这种情况。而不是同时接受委托和应该在调用时传递给它的参数列表,只需要求所有委托都是无参数的(即Action)。然后,如果调用者希望使用给定的一组参数运行方法,则将其包装在一个无参数的方法中,该方法使用一组固定的参数调用给定的函数。在大多数情况下,这可以使用lambda方便地完成,因此这对于调用者来说不是一个烦人的请求;实际上,它通常会在更容易上然后指定一个函数和一个参数列表。

您的方法签名随后变为:

public void Foo(Action action) {}

对于来电者来说,它将是:

Foo(() => SomeMethod(firstArgument, secondArgument));

然后,您可以从那些您可以轻松调用的操作中创建List<Action>,而不必使用反射或动态类型。此解决方案维护所有函数及其参数的完全编译时检查,因此您无需担心处理所提供的无效参数。