传递成员名称作为参数

时间:2018-07-07 18:52:08

标签: c# generics lambda

是否可以仅传递没有参数的方法/函数(成员)的名称? 与Moq的功能类似:

    Mock<Foo>fooMoq = new Mock<Foo>();
    fooMoq.Setup(f => f.DummyMethod(It.IsAny<string>()));

但是没有It.IsAny():

    Mock<Foo> fooMoq = new Mock<Foo>();
    fooMoq.Setup(f => f.DummyMethod);

我的意思不是说起订量,而是总的来说。 谢谢。

编辑: 我要获取的是成员的名称,以便以后拦截对该方法的调用。这就是为什么我对知道将哪些参数传递给该方法不感兴趣,而只想知道它们想要拦截哪些方法。

1 个答案:

答案 0 :(得分:0)

不,您不能从lambda参数的实例传递方法。最接近的方法是使用方法组转换。但是,您并未真正指定要实现的目标。

OP编辑后:

没有比这更简单的方法了,这就是为什么流行的框架(如MOQ)要求您传递所有必需的参数的原因。常用的方法之一就是传递一个只有空值(或值类型的默认值)的方法,如下所示:

fooMoq.Setup(f => f.DummyMethod(null,null,null));

还有另一种方法,它允许您不传递任何参数,但是会丢失对方法类型的静态类型检查,因此可以在此处传递任何方法名称。另外,读取它也会带来更多问题,因为您只有方法名称和类型,这在读取重载函数时可能会引起问题。

public class Program
{
    public static void Main()
    {
       Setup<Test>(nameof(Test.DummyMethod));
    }

    public static void Setup<T>(string methodName)
    {

    }
}

public class Test
{
    public void DummyMethod()
    {

    }
}