0

我有一个方法需要将函数及其所有者类作为输入参数,然后通过反射处理其名称。当然,我可以将几个strings 作为输入参数,因此该方法如下所示:

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

并会这样称呼:

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

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

我想这可以用表达式来解决。我面临的问题是,如果方法Bar有参数,则必须在调用方法时显式指定它们(在我的情况下这似乎过分,您以后只需要方法的名称)。

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

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

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

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

4

2 回答 2

0

我认为您正在寻找事件或委托的用法。

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

于 2016-07-18T17:49:07.333 回答
-1

是的,使用Delegate关键字。

在这里查看答案。

于 2016-07-18T17:45:58.507 回答