Рассмотрим приведенный ниже фрагмент кода
string src = "ibm,tcs";
string dest = src.Split(',').Select(i => i + "();,").ToArray().Aggregate((s, i) => s + i);
dest = dest.Substring(0, dest.Length - 1);
Что я делаю, так это то, что исходная строка (здесь src) будет иметь список строк, разделенных запятыми.
Окончательный результат будет: ibm();,tcs();
Как мы можем это понять, моя программа так и поступает.
Но я прибегаю к помощи dest.Substring(0, dest.Length - 1);
для удаления последнего ","
, который я создаю в методе Select Extension.
Мне не нравится такой подход.
Есть ли какой-нибудь другой красивый / элегантный способ сделать это? Уверен, что кто-то точно подойдет лучше :)
Также буду рад, если получу решение, использующее Lambda & Extension Method.
Я использую C # 3.0 и dot net framework 3.5
Благодарность
2 ответа
Просто используйте string.Join
вместо Aggregate
и не включайте запятую в предложение Select:
string dest = string.Join(",", src.Split(',')
.Select(i => i + "();")
.ToArray());
В .NET 4 вам даже не понадобится вызов ToArray()
(поскольку в string.Join
были добавлены дополнительные перегрузки).
Или, как совершенно альтернативный подход:
string dest = src.Replace(",", "();,") + "();";
string dest = string.Join(",", src.Split(',').Select(i => i + "();").ToArray());
Или
string dest = string.Join(",", Array.ConvertAll(src.Split(','), s => s + "();"));
Похожие вопросы
Новые вопросы
c#-3.0
C # 3.0 («C # Orcas») представляет несколько языковых расширений, основанных на C # 2.0, для поддержки создания и использования библиотек классов функциональных стилей высшего порядка. Расширения позволяют создавать композиционные API, которые имеют одинаковую выразительную мощь языков запросов в таких областях, как реляционные базы данных и XML. Используйте этот тег, если ваш вопрос относится к конкретным функциям C # 3.0. В противном случае просто используйте тег C #.