大家好日子!比方说,我有一个函数,包含2个变体的lambda表达式:
DoSomething('a', x => { });
DoSomething('b', x => { Console.WriteLine(x); })
在程序中,我需要根据表达式中的方法是否包含某些代码来执行某些操作。在我看来,它必须看起来像这样:
public void DoSomething (char symbol, Action<string> execute)
{
if (execute.Method.IsEmpty)
DoThis(...)
else
DoThat(...)
}
但是,当然,我无法写出这一点。那么,我该如何检查函数中是否有命令?
答案 0 :(得分:0)
似乎有两种不同的方法:
public void DoSomething (char symbol)
{
DoThis()
}
public void DoSomething (char symbol, Action<string> execute)
{
if (execute == null) /* handle null case */
DoThis()
else
DoThat()
}
另一个选项可能是可选参数(你应该检查任何一种方法):
public void DoSomething (char symbol, Action<string> execute = null)
{
if (execute == null)
DoThis()
else
DoThat()
}
答案 1 :(得分:-1)
您可以尝试查看相应的IL操作:
public void DoSomething(char symbol, Action<string> execute)
{
byte[] body = execute.Method.GetMethodBody().GetILAsByteArray();
if ((body.Length == 1 && body[0] == 42) || (body.Length == 2 && body[0] == 0 && body[1] == 42))
{
// 0 - no op
// 42 - return
DoThis(...)
}
else
{
DoThat(...)
}
}