C# - 将方法作为参数而不指定args

时间:2016-07-18 17:29:44

标签: c# reflection nameof

我有一个方法需要将函数及其所有者类作为输入参数,然后使用反射继续其名称。当然我可以使用几个string作为输入参数,所以方法看起来像这样:

void Proceed(string className, string methodName)
{
  Console.WriteLine($"{className}.{methodName} called");
  //...
}

并会像这样调用:

Proceed(nameof(Foo), nameof(Foo.Bar));

但我想知道每次尝试调用该方法时是否有任何方法可以避免编写nameof关键字。对我来说Proceed<Foo>(f => f.Bar)之类的东西会更好看。

我想这可以通过表达来解决。我面临的问题是,如果方法Bar有参数,你必须在调用方法时明确指定它们(在我只需要方法的名称稍后)。

所以,我设法找到的最佳解决方案是this one

void Proceed<T>(Expression<Func<T, Action<object, object>>> expression)
{
//...
}

然而它仍然在自己的args中指定参数方法的签名,因此不够通用。

我想知道是否有某种方法可以将函数作为参数传递而不指定其参数(假设我以后只需要它的名称,就像nameof关键字一样)。

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找事件或代表的使用。

您可以在线查找有关这2个的更多信息。我们的想法是,它们存储一些具有相同参数的方法,以便以后知道需要调用哪种参数。

答案 1 :(得分:-1)

是的,请使用Delegate关键字。

请参阅答案here