Самый эффективный способ объединения строк? - PullRequest
2 голосов
/ 19 февраля 2012

Каков наилучший способ объединения строк для получения ukr:'Ukraine';rus:'Russia';fr:'France' результата?

public class Country
{
    public int IdCountry { get; set; }
    public string Code { get; set; }
    public string Title { get; set; }
}

var lst = new List<Country>();
lst.Add(new Country(){IdCountry = 1, Code = "ukr", Title = "Ukraine"});
lst.Add(new Country() { IdCountry = 2, Code = "rus", Title = "Russia" });
lst.Add(new Country() { IdCountry = 3, Code = "fr", Title = "France" });
string tst = ????

Ответы [ 4 ]

8 голосов
/ 19 февраля 2012

Я думаю, что-то вроде этого будет довольно читабельным:

string tst = string.Join(";", lst.Select(x=> string.Format("{0}:'{1}'", x.Code, x.Title)));

string.Join() использует StringBuilder под капотом, поэтому при сборке результата это не должно создавать ненужных строк.

Поскольку параметр string.Join() - это просто IEnumerable (для этой перегрузки требуется .NET 4), вы также можете разделить его на две строки, чтобы еще больше улучшить читаемость (на мой взгляд) без ущерба для производительности:

var countryCodes = lst.Select(x=> string.Format("{0}:'{1}'", x.Code, x.Title));
string test = string.Join(";", countryCodes);
1 голос
/ 19 февраля 2012

Вы можете переопределить метод ToString в классе Country для возврата string.format("{0}:'{1}'", Code, Title) и использовать string.join для присоединения к членам этого списка.

0 голосов
/ 19 февраля 2012

Немного эффективный способ, так как LINQ часто бывает менее эффективным, чем простой foreach или for (в данном случае) цикл.

Все зависит от того, что точно выЯ имею в виду, говоря «самый эффективный способ».

Метод расширения:

public static string ContriesToString(this List<Country> list)
{
    var result = new StringBuilder();
    for(int i=0; i<list.Count;i++)
       result.Add(string.Format("{0}:'{1}';", list[i].Code, list[i].Title));

    result.ToString();
}

использование:

var lst = new List<Country>();
lst.Add(new Country(){IdCountry = 1, Code = "ukr", Title = "Ukraine"});
lst.Add(new Country() { IdCountry = 2, Code = "rus", Title = "Russia" });
lst.Add(new Country() { IdCountry = 3, Code = "fr", Title = "France" });
string tst = lst.ContriesToString();
0 голосов
/ 19 февраля 2012

метод Enumerable.Aggregate довольно хорош.

var tst = lst.Aggregate((base, current) => 
                  base + ";" + String.Format("{0}:'{1}'", current.Code, current.Title));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...