我正在尝试将一些Go代码转换为C#。在Go中,例如:
type MyType interface{}
这类似于C#中的object
还是MyType<T>
?
在Go代码中,有一个这样的接口数组,每个接口返回一个具有不同参数的函数。
我可以在C#中返回List of Funcs
,但动态参数就是问题。
我在C#中表示这个问题。需要一些指导才能找到正确的道路。
答案 0 :(得分:1)
到目前为止,最好的选择是完全避免这种情况。而不是同时接受委托和应该在调用时传递给它的参数列表,只需要求所有委托都是无参数的(即Action
)。然后,如果调用者希望使用给定的一组参数运行方法,则将其包装在一个无参数的方法中,该方法使用一组固定的参数调用给定的函数。在大多数情况下,这可以使用lambda方便地完成,因此这对于调用者来说不是一个烦人的请求;实际上,它通常会在更容易上然后指定一个函数和一个参数列表。
您的方法签名随后变为:
public void Foo(Action action) {}
对于来电者来说,它将是:
Foo(() => SomeMethod(firstArgument, secondArgument));
然后,您可以从那些您可以轻松调用的操作中创建List<Action>
,而不必使用反射或动态类型。此解决方案维护所有函数及其参数的完全编译时检查,因此您无需担心处理所提供的无效参数。