假设我们有这段代码:
Action<int> gf = k => { };
Action<int> gfa = k => { k++; };
如何确定 gf
没有正文或语句?
是否可以获取 Action
中的语句数?
类似于 GetNumberOfStatements(gf)
应该返回 0
。
或者也许 HasEmptyBody(gf) 应该 返回 true
;
最佳答案
好吧,这有点不确定,但您可以检查方法体的 IL 并检查它是否为空或完全由 Nops 组成。 (当然最后的 Ret 除外)。
显然,如果编写该方法的编程语言的编译器已编译掉操作而没有任何影响,那么您将在此处得到误报。但我假设您主要对 (arg1, arg2, ... ) => { }
C# 案例感兴趣,这应该可以正常工作。
public static bool IsEmpty(this Delegate del)
{
// Null arg-checking omitted.
short nop = System.Reflection.Emit.OpCodes.Nop.Value;
var ilArray = del.Method.GetMethodBody().GetILAsByteArray();
return ilArray.Take(ilArray.Length - 1).All(b => b == nop);
}
关于c# - 是否有可能获得一个 Action 中的语句数量或确定它是否有空体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15813579/