C# FormattableString конкатенация для многострочной интерполяции
В C#7 я пытаюсь использовать многострочную интерполированную строку для использования с FormttableString.Invariant, но конкатенация строк оказывается недопустимой для FormttableString.
Согласно документации: Экземпляр FormattableString может быть результатом интерполированной строки в C# или Visual Basic.
Следующая многострочная конкатенация FormttableString не компилируется:
using static System.FormattableString;
string build = Invariant($"{this.x}"
+ $"{this.y}"
+ $"$this.z}");
Ошибка CS1503 - Аргумент 1: невозможно преобразовать строку в строку "System.FormattableString"
Использование интерполированной строки без конкатенации приводит к компиляции:
using static System.FormattableString;
string build = Invariant($"{this.x}");
Как реализовать многострочную конкатенацию строк с FormattableString
тип?
(Обратите внимание, что FormattableString был добавлен в.Net Framework 4.6.)
1 ответ
Инвариантный метод ожидает параметр FormattableString
тип. В вашем случае параметр $"{this.x}" + $"{this.y}"
становится "string" + "string'
который оценит string
Тип вывода. Вот почему вы получаете ошибку компиляции, так как Invariant
ожидает FormattableString
и не string
,
Вы должны попробовать это для однострочного текста -
public string X { get; set; } = "This is X";
public string Y { get; set; } = "This is Y";
public string Z { get; set; } = "This is Z";
string build = Invariant($"{this.x} {this.y} {this.z}");
Выход -
Это Х Это Y Это Z
И реализовать multiline
Интерполяция, вы можете построить FormattableString, как показано ниже, а затем использовать инвариант.
FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);
Выход -
Это икс
Это Y
Это Z