Здравствуйте, ·, Вы писали:
·>Здравствуйте, Jack128, Вы писали:
J>> Строка — это просто вариант по умолчанию. В общем случае ты можешь написать свой InterpolatedStringHandler и заиметь полный того, что в заглавном посте для джавы было написано.
J>> J>> DbDataReader reader = DB.ExecuteToReader($"SELECT * FROM Person p WHERE p.last_name = {name}"); // будет сгенерён sql c параметром
J>>
·>Да, похоже. Но как-то страшно выглядит... Магические атрибуты какие-то и куча магии в компиляторе. С другой стороны, наверное проще для оптимизатора кода.
Магия этого атрибута — ничто по сравнению с DllImportAttribute, но как то живём.
А так, да, там и производительность больше (сможет джава убрать вызовы List.of если они не нужны? например Logger.TRACE."Залогинился \{userName}", а логируем мы только ошибки )
Еще в хенлере используется обычная перегрузка, поэтому мы можем ограничить множество типов, допустимых в плейсхолерах. Например в SqlInterpolatedStringHandler можно пускать только числовые типы, строку, дату и byte[] , а на остальные типы компилятор будет ругаться.
Поэтому да, возможностей больше, общая спецификация сложнее.