Упрощение интерполяции строки

Нашел вот такую информацию. Однако меня интересует другое. К примеру у меня есть в коде такой метод:

public static void outDebug(LogFilter type, string text, params object[] args)
{
    if (!ShouldLog(type, LogLevel.Debug))
        return;

    outMessage(type, LogLevel.Debug, text, args);
}

Я хочу минимизировать боксинги в случае когда у меня попадаются переменные - value type. Да и вообще в итоге все вызовы функций и методов сводятся к использованию вот этого метода.

Чтобы не бегать по всему коду и искать устаревшую интерполяцию типа:

Log.outDebug(LogFilter.Rbac, "RBACData.DenyPermission [Id: {0} Name: {1}] (Permission {2}, RealmId {3}). Permission does not exists",
               GetId(), GetName(), permissionId, realmId);

где у меня комбинированы строки и другие (обычно value) типы, я просто меняю параметры метода на string[]:

public static void outDebug(LogFilter type, string text, params string[] args)
{
    if (!ShouldLog(type, LogLevel.Debug))
        return;

    outMessage(type, LogLevel.Debug, text, args);
}

и получаю тонну ошибок в тех местах, где и нужно.

Однако, довольно долго вручную производить операции. IntelliSense почему-то позволяет автоматизировать только однотипные случаи, которых очень мало. Почему-то разработчики его не научили распознавать обычный формат. Я согласен, что тут можно написать любую функцию и любую последовательность аргументов, поэтому IDE не хочет принимать решение.

Однако они уже внедрили ИИ и я надеялся, что после 10-20 исправлений - ИИ сообразит что там происходит и подхватит это дело - но увы.

Может кто знает, существует ли (название) "чудо-расширения" для таких случаев?

В итоге чтобы получить автоматически вот такое:

Log.outDebug(LogFilter.Rbac, $"RBACData.DenyPermission [Id: {GetId()} Name: {GetName()}] (Permission {permissionId}, RealmId {realmId}). Permission does not exists");

Ответы (0 шт):