c# - 传递成员名称作为参数
问题描述
是否可以只传递不带参数的方法/函数(成员)的名称?类似于 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);
我的意思不是在起订量的背景下,而是在一般情况下。谢谢。
编辑:我要获取的是成员的名称,以便稍后拦截对该方法的调用。这就是为什么我对知道将传递给方法的哪些参数不感兴趣,我只想知道他们要拦截哪些方法。
解决方案
不,您不能从 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()
{
}
}
推荐阅读
- python - 排除特定字符输入到文本字段Python guizero
- java - RecyclerView列表搜索(过滤)EditText问题
- python - 为什么我需要另一个来自 tensorflow 的 conda 环境?
- xcode - 用于在 XCode 中调试 KMM 项目的 Touchlab Xcode-plugin 无法正常工作
- ckeditor - CKeditor (with TYPO3) - svg 标签是 html 编码的
- python - 根据另一列的值修改熊猫中的日期时间列
- tapkey - Tapkey Management API IdentityProvider 用户:删除/(更新)?
- excel - 使用命令提示符将选定图像从一个文件夹复制到另一个文件夹
- string - 批处理中与等号的子字符串比较
- material-ui - 从 Material-UI Date/TimePicker 中删除日历图标 - 但需要保留默认验证