gpt4 book ai didi

c# - 在 C# 中,我如何评估一个类的任何成员是否包含 switch case 或 if else 构造?

转载 作者:行者123 更新时间:2023-11-30 15:59:04 26 4
gpt4 key购买 nike

在 C# 中,我如何评估类的任何成员是否包含 switch case 或 if else 构造?我想检查单元测试是否使用 switch...case 或链式 if....else 编写了一个类。

我知道如何使用反射获取类的成员,但无法在互联网上找到有关如何获取实际代码的示例。来自 this所以我发现你可以使用 MethodBase.GetMethodBody()here .这似乎很适合返回 MethodBody用于获取变量,但找不到如何获取有关 switch...caseif...else 是否存在的信息。

有什么解决方案吗?

最佳答案

你不能用反射来做到这一点。是的,您可以获得方法 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

其他选择,当然是自己解析文本并找到你想要的..

关于c# - 在 C# 中,我如何评估一个类的任何成员是否包含 switch case 或 if else 构造?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42199908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com