Как получить длину идентификатора / метода в C #?

Я пытаюсь получить длину всех идентификаторов и методов проекта, созданного в ASP.NET Core 2.2, чтобы проанализировать метрики кода для домашнего задания, но я не нашел никакого инструмента, который предоставляет эту метрику. .

До сих пор я использовал метрики кода Visual Studio 2019 и получил следующие метрики:

  • Индекс ремонтопригодности
  • Цикломатическая сложность
  • Глубина наследования
  • Сцепление классов
  • Строки кода

Я хочу знать, есть ли какой-нибудь инструмент, который предоставляет мне ту метрику, которую я ищу.


person Sebastián Arribasplata    schedule 12.12.2019    source источник


Ответы (2)


Вы можете использовать инструмент NDepend для вычисления метрики identifierLength. NDepend также поддерживает множество других показателей кода.

Например, вы можете написать этот запрос кода C # LINQ. Вы можете попробовать себя в полнофункциональной пробной версии, доступной для загрузки.

from m in Application.Methods
select new { m, identifierLength = m.SimpleName.Length }

код метрики Длина идентификатора с NDepend

Заявление об ограничении ответственности: я работаю в NDepend

person Patrick from NDepend team    schedule 12.12.2019
comment
Спасибо, это то, что я искал. - person Sebastián Arribasplata; 13.12.2019

Используя API отражения, вы можете получить все типы в сборке с Assembly.GetTypes().

Для каждого типа вы можете получить все методы с Type.GetMethods().

Для каждого метода вы можете получить MethodBody с MethodInfo.GetMethodBody().

Затем вы можете вызвать GetILAsByteArray() для каждого MethodBody, чтобы получить IL в виде байтового массива.

Это необработанный байт-код, но вы можете использовать длину этого байтового массива в качестве метрики.

Если вы хотите анализировать код как C #, вам нужно будет дизассемблировать его из IL с помощью чего-то вроде Reflector.

person Igby Largeman    schedule 12.12.2019