C# массив (array) в строку (string) определенного формата

Дано: код на языке C Sharp (C#) (в моем случае на ASP.Net Core 2). Имеется строковая переменная, например, со следующим значением:

string strExt = "pdf ,docx, xlsx,pptx, jpg,  jpeg , png "

Строку разделили на массив строк при помощи функции SPLIT.

Задача: преобразовать исходную строку (или разделенный массив) в строку вида:

"'pdf', 'docx', 'xlsx', 'pptx', 'jpg', 'jpeg', 'png'"

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

Предыстория: откуда задача - исходная строка (strExt) - это параметр приложения на ASP.Net Core 2, который задается администратором системы. На одной из веб-страниц приложения, заданной в формате RAZOR, нужно вставить данный параметр в JS-скрипт (javascript), который ajax'ом отправляет данные на сервер (конкретно - скрипт для загрузки файлов). Данный скрипт принимает параметры в определенном формате, указанном в задаче.

Просто замену запятой на запятую с апострофами сделать не получится, т.к. в исходной строке может стоять произвольное количество пробелов в разных местах (но не внутри слов). Поэтому легче всего сначала разделить эту строку на массив строк:

var s1 = strExt.Split(',');

Теперь нужно снова собрать строку. Можно было бы, конечно, использовать функцию JOIN, например, так:

string s2 = String.Join ("', '", s1);

Но не произойдет урезание пробелов и будет примерно такой результат:

s2 = "'pdf ', 'docx', ' xlsx', 'pptx', ' jpg', '  jpeg ', ' png '"

Поэтому используем функцию Aggregate, где указываем, как соединять строки и что нужно усечь пробелы:

string s3 = s1.Aggregate((prev, current) => (prev + "', '" + current.Trim()));

На случай, если значение массива пустое, добавляем условие:

(Tools.HasValue(current.Trim()) ? prev + "', '" + current.Trim() : prev)

Где Tools.HasValue - любая ваша функция, проверяющая на отсутствующее значение.

Итак, итоговый результат в моем случае

На стороне сервера исходное значение в следующей переменной:

AppSettings.FileAllowedExtensions = "pdf ,docx, xlsx,pptx, jpg,  jpeg , png ";

На стороне razor-странице указываю такую объединенную команду с добавлением открывающего и закрывающего апострофов:

@Html.Raw("'" + AppSettings.FileAllowedExtensions.Split(',')
.Aggregate((prev, current) => 
((Tools.HasValue(current.Trim()) ? 
prev + "', '" + current.Trim() : prev))) + "'")


В итоге в JS-скрипте получаю то, что нужно:

"'pdf', 'docx', 'xlsx', 'pptx', 'jpg', 'jpeg', 'png'"


Конкретно в этом примере (где нет пробелов в разделяемых строках), можно использовать и упрощенный пример с заменой (удаляем все пробелы, делаем замену запятой на запятую с апострофом без преобразования в массив):

.Replace(" ", "").Replace(",", "', '")

Итоговая команда:

@Html.Raw("'" + AppSettings.FileAllowedExtensions.
Replace(" ", "").Replace(",", "', '") + "'")

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


(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.

Комментариев нет:

Отправить комментарий