Упрощение интерполяции строки
Нашел вот такую информацию. Однако меня интересует другое. К примеру у меня есть в коде такой метод:
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");