Длинные строки интерполяции в C#6


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

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

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

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

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

5 ответов:

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

вы должны использовать $@ синтаксис для использования интерполированное дословно строка, и вы можете разместить новые строки внутри {...} параметры, например:

string s = $@"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 где это имеет смысл.

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

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

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

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

$@"Height: {height}
Width: {width}
Background: {background}"

я использовал 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();
    }

это здесь:

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

обратите внимание на вторую $ на $"..." + $"..."