Лично я бы использовал:
return string.Join(",", RequestContext.accounts
.Select(x => x.uniqueid)
.Distinct());
Нет необходимости явно зацикливаться, вручную использовать StringBuilder
и т. Д. ... просто выразить все это декларативно:)
(Вы быв конце нужно вызвать ToArray()
, если вы не используете .NET 4, что, очевидно, несколько снизит эффективность ... но я сомневаюсь, что это станет узким местом для вашего приложения.)
РЕДАКТИРОВАТЬЛадно, для решения без LINQ ... если размер разумно маленький, я бы просто для:
// First create a list of unique elements
List<string> ids = new List<string>();
foreach (var account in RequestContext.accounts)
{
string id = account.uniqueid;
if (ids.Contains(id))
{
ids.Add(id);
}
}
// Then convert it into a string.
// You could use string.Join(",", ids.ToArray()) here instead.
StringBuilder builder = new StringBuilder();
foreach (string id in ids)
{
builder.Append(id);
builder.Append(",");
}
if (builder.Length > 0)
{
builder.Length--; // Chop off the trailing comma
}
return builder.ToString();
Если бы вы могли иметь большой коллекция строк, вы можете использовать Dictionary<string, string>
как своего рода подделку HashSet<string>
.