Подстрока интерполяция - PullRequest
       35

Подстрока интерполяция

0 голосов
/ 04 февраля 2019

Можно ли выполнить строковую интерполяцию, отформатировав подстроку строки?

Я искал документы Microsoft о интерполяции строки, но не смог получить рабочий образец. ссылка .

В настоящее время у меня есть:

var description = "the quick brown fox";
var result = $"{description.Substring(0, description.Length < 10 ? description.Length : 10)} jumps..",

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

var description = "the quick brown fox";
var result = $"{description:10} jumps..",

отредактировано

Я ожидаю, что результат будет:

The quick  jumps..

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Поскольку вопрос был:
«Можно ли выполнить интерполяцию строки, форматирующую подстроку строки?»
Таким образом:

var result = $"{description:10} jumps..",

Ответ, полученный от @JohnSkeet и @JeroenMostert были наиболее острыми:
«Нет, это невозможно.»

Существуют различные способы упростить вызов.спасибо за @PiotrWojsa за указание на это.однако это не включает в себя интерполяцию ..

0 голосов
/ 04 февраля 2019

Вы можете использовать Взять метод:

description.Take(10)

К сожалению, этот метод возвращает IEnumerable, который нельзя напрямую преобразовать в строку (метод ToString будет возвращать имя типа, как обычно, при его использованиина IEnumerable).Вы не можете создать строку, используя ее, потому что строковому конструктору требуется массив символов, поэтому самое простое решение будет:

new string(description.Take(10).ToArray())

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

public static string TakeFirst(this string text, int number)
{
    if (text == null)
        return null;

    return new string(text.Take(number).ToArray());
}

Тогда вы можете просто использовать его:

$"{description.TakeFirst(10)} jumps..";

РЕДАКТИРОВАТЬ: Как упоминалось в комментариях, из-за выделения массива каждый раз, когда этот методназывается, могут возникнуть серьезные проблемы с производительностью.Вы можете избежать их, реализовав метод TakeFirst, используя Подстрока вместо Take (x) .ToArray () решение.

...