Подтвердить что ты не робот

Строки интерполяции длинной строки в С# 6

Я обнаружил, что, хотя интерполяция строк действительно хороша при применении к моей существующей строковой строке кода. Форматирование вызовов, учитывая, как правило, предпочтительный предел столбца, строка быстро становится слишком длинной для одной строки. Особенно, когда интерполированные выражения сложны. С строкой формата у вас есть список переменных, которые можно разбить на несколько строк.

var str = string.Format("some text {0} more text {1}",
    obj1.property,
    obj2.property);

Есть ли у кого-нибудь какие-либо предпочтительные способы разбить эти строки?

Я полагаю, вы могли бы сделать что-то вроде:

var str = $"some text { obj1.property }" +
  " more text { obj2.property };
4b9b3361

Ответ 1

Вы можете разбить строку на несколько строк, но я бы не сказал, что синтаксис выглядит приятнее.

Вам нужно использовать синтаксис [email protected], чтобы использовать интерполированную строку verbatim, и вы можете поместить строки новой строки внутри параметров {...}, например:

string s = [email protected]"This is all {
    10
    } going to be one long {
    DateTime.Now
    } line.";

Строка, указанная выше, не будет содержать новых строк и будет иметь такой контент:

Это все 10 будет одной длинной линии 01.08.2015 23.49.47.

(примечание, норвежский формат)

Теперь, сказав это, я не перестану использовать string.Format. На мой взгляд, некоторые из этих строковых интерполяционных выражений выглядят действительно хорошо, но более сложные из них становятся очень трудными для чтения. Учитывая, что, если вы не используете FormattableString, код будет скомпилирован в вызов string.Format, я бы сказал, продолжайте идти с string.Format, где это имеет смысл.

Ответ 2

Вы можете объединить $ и @ вместе, чтобы получить интерполяцию строк и многострочный строковый литерал:

var str = [email protected]"some text { obj1.property }
     more text { obj2.property }";

Но это даст вам символ NewLine между ними, поэтому может быть не так, как вы хотите.

Ответ 3

OP попросил что-то еще, но я ожидаю, что многие люди, читающие этот вопрос, хотели бы использовать многострочный интерполированный $"", который работает как @"". Для этого используйте [email protected]""

[email protected]"Height: {height}
Width: {width}
Background: {background}"

Ответ 4

Я использовал StringBuilder в переопределенном ToString() в качестве примера.

    // return employee data
    public override string ToString()
    {
        StringBuilder buffer = new StringBuilder();
        buffer.AppendLine($"Number: {EmployeeNumber}");
        buffer.AppendLine($"Name: {EmployeeName}");
        buffer.AppendLine($"Address: {PostalAddress}");
        buffer.AppendLine($"Phone: {PhoneNumber}");
        buffer.AppendLine($"Age: {EmployeeAge}");
        buffer.AppendLine($"Gender: {EmployeeGender}");
        buffer.AppendLine($"Status: {EmployeeStatus}");
        buffer.AppendLine($"Manager: {EmployeeManager}");
        buffer.AppendLine($"Start: {EmployeeStartDate.ToShortDateString()}");
        return buffer.ToString();
    }

Ответ 5

Это он:

var str = $"some text { obj1.property }" +
          $" more text { obj2.property }";

Обратите внимание на второй $ в $"..." + $"..."