C # FormattableString конкатенация для многострочной интерполяции - PullRequest
0 голосов
/ 13 октября 2018

В 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: невозможно преобразовать строку из 'string' в 'System.FormattableString'

Использование интерполированной строки без конкатенации приводит к компиляции:

using static System.FormattableString;
string build = Invariant($"{this.x}");

Как реализовать многострочная конкатенация строк с типом FormattableString?

(Обратите внимание, что FormattableString был добавлен в .Net Framework 4.6.)

1 Ответ

0 голосов
/ 13 октября 2018

Инвариантный метод ожидает параметр 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}");

Вывод-

Это X Это Y Это Z

И для реализации multiline интерполяции вы можете построить FormattableString, как показано ниже, а затем использовать Invarient.

FormattableString fs = $@"{this.X}
{this.Y}
{this.Z}";
string build = Invariant(fs);

Выход -

Это X

Это Y

Это Z

...