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

Другие вопросы по тегам