В 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,

Другой вариант, конечно же, разобрать текст в себе и найти то, что вы хотите..

Другие вопросы по тегам