У C # 6 є нова особливість: інтерпольовані рядки.
Вони дозволяють вводити вирази безпосередньо в код, а не покладатися на індекси:
string s = string.Format("Adding \"{0}\" and {1} to foobar.", x, this.Y());
Стає:
string s = $"Adding \"{x}\" and {this.Y()} to foobar.";
Однак у нас є багато рядків у декількох рядках, використовуючи дослівно-рядкові рядки (в основному SQL-заяви), як це:
string s = string.Format(@"Result...
Adding ""{0}"" and {1} to foobar:
{2}", x, this.Y(), x.GetLog());
Повернення їх до звичайних рядків здається безладним:
string s = "Result...\r\n" +
$"Adding \"{x}\" and {this.Y()} to foobar:\r\n" +
x.GetLog().ToString();
Як я можу використовувати як дослівні, так і інтерпольовані рядки разом?
3
Якщо мова йде дійсно про рядки SQL, чи є якась причина, чому ви не використовуєте замість них параметризовані запити?
—
svick
"у нас дуже багато рядків у декількох рядках із використанням дословних рядків (в основному операторів SQL)" звучить так, що у вас багато струн SQL, що дозволяє атакувати ін'єкції SQL.
—
Cetin Basoz
@svick ми є, все введення користувача налаштовано. Ми все ще активно використовуємо динамічний SQL, оскільки динамічно створюємо SQL для наших сутностей у коді.
—
Кіт
@CetinBasoz ми цього не робимо - всі дані користувача налаштовані. Існує маса обставин, коли у вас є динамічний SQL - наприклад, LINQ або будь-яка інша рамка відображення об'єктів.
—
Кіт