В C# как я могу оценить, если какие-либо члены класса содержат регистр переключателя или если еще конструкции?
В C# как я могу оценить, если какие-либо члены класса содержат регистр переключателя или если еще конструкции? Я хочу проверить в модульном тесте, если класс был написан с switch...case
или прикованный if....else
,
Я знаю, как получить членов класса с помощью рефлексии, но не могу найти пример во взаимосвязи того, как получить реальный код. Из этого ТАК сообщения, которое я нашел, вы можете использовать MethodBase.GetMethodBody()
здесь. Это кажется хорошим для возврата MethodBody для получения переменных, но не может найти, как получить информацию, если switch...case
или же if...else
существует.
Какие-либо решения доступны?
1 ответ
Вы не можете сделать это с отражением. Да, вы можете получить байтовый массив метода 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
,
Другой вариант, конечно же, разобрать текст в себе и найти то, что вы хотите..