在C#中,我如何评估一个类的任何成员是否包含switch case或if else构造?我想检查单元测试是否已使用switch...case
或链式if....else
编写了一个类。
我知道如何使用反射获取类的成员,但是无法在如何获取实际代码的互联网上找到示例。来自this SO帖子我发现您可以使用MethodBase.GetMethodBody()
,here。返回MethodBody获取变量似乎很棒,但无法找到如何获取switch...case
或if...else
是否存在的信息。
有哪些解决方案?
答案 0 :(得分:3)
你不能用反射来做。是的,你可以得到IL字节数组的方法,但它对你的要求没用。
实现你所需要的最好方法是使用Roslyn,然后它就不会更简单了。
bool ContainsIfElseOrSwitchTest()
{
var classToTest = // you can get it from your VS solution
// or by reading the .cs file from disk
// for example
classToTest = CSharpSyntaxTree.ParseText(File.OpenRead(pathToFile));
return classToTest.GetRoot().DescendantNodes().
Any(node => node is SwitchStatementSyntax || node is IfStatementSyntax);
}
根据评论更新答案。
其他选项是使用Mono.Cecil
直接获取IL指令而不使用字节数组。但您必须知道,您只能知道说明是否包含条件,而您无法知道它是if else
还是switch
。
其他选择,当然要解析自己的文本并找到你想要的东西..