Рассмотрим приведенный ниже фрагмент кода

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

Благодарность

0
user372724 15 Июл 2010 в 18:11

2 ответа

Лучший ответ

Просто используйте string.Join вместо Aggregate и не включайте запятую в предложение Select:

string dest = string.Join(",", src.Split(',')
                                  .Select(i => i + "();")
                                  .ToArray());

В .NET 4 вам даже не понадобится вызов ToArray() (поскольку в string.Join были добавлены дополнительные перегрузки).

Или, как совершенно альтернативный подход:

string dest = src.Replace(",", "();,") + "();";
5
Jon Skeet 15 Июл 2010 в 18:13
string dest = string.Join(",", src.Split(',').Select(i => i + "();").ToArray());

Или

string dest = string.Join(",", Array.ConvertAll(src.Split(','), s => s + "();"));
1
onof 15 Июл 2010 в 18:27