gpt4 book ai didi

C#:传递一个带有可变参数的方法作为另一个方法的参数

转载 作者:行者123 更新时间:2023-11-30 20:33:01 25 4
gpt4 key购买 nike

所以在这里我试图将一个带有随机签名的方法传递给 Foo 方法。但没有任何运气。
问题是我可以通过任何行动。但是在一个方法上。
有帮助吗?

class Bar
{
void M1(int a) { }
void M2(string a, int b) { }

Action<string, int, bool> A1 = (s, i, b) => {};
Action<int, float> A2 = (i, f) => {};

void Foo(Delegate f) {}

void Test()
{
Foo(A1);
Foo(A2);
// Foo(M1); // nope
// Foo(M2); // no way
}
}

附言。我正试图让它在 Unity3d 的 Mono 下工作。

最佳答案

您必须转换为具体的委托(delegate)类型才能执行此操作,如下所示:

void Test()
{
Foo(A1);
Foo(A2);
Foo((Action<int>) M1);
Foo((Action<string, int>)M2);
}

原因是M1M2就是所谓的方法组。这只是意味着他们指的是一种或多种方法。为什么可以不止一个?因为您可能有多个名为 M1 的方法,每个方法都接受不同的参数集。但是,即使您只有一个重载,就像您的情况一样,也可能有多个与该重载签名兼容的委托(delegate)类型(可能是 Action<int>YourDelegateType 声明为 delegate void YourDelegateType(int arg),或别的什么)。

这就是为什么没有从方法组到委托(delegate)的隐式转换,您必须将方法组显式转换为特定的委托(delegate)类型。

关于C#:传递一个带有可变参数的方法作为另一个方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40716197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com