добавить значение только в первой итерации цикла

#c# #asp.net

#c# #asp.net

Вопрос:

Я использую следующий код, и мне нужно объединить ключ и значение, но свойство edit должно быть добавлено к строке только в начале (только в первый раз), как мне это сделать? Я безуспешно пытаюсь найти индекс для текущего и списка…есть идея?

 string Meassage = null;
foreach (var current in PropList)
{
    Meassage = "edit:"   current.Key   "="   current.Value;
}
  

Ответ №1:

Запишите список пар ключ-значение в Message свой цикл, а затем отложите "edit:" к нему в конце, вот так:

 foreach (var current in PropList) {
    Message  = current.Key   "="   current.Value   " ";
}
Message = "edit:"   Message;
  

Обратите внимание, что это не эффективный способ сделать это: вместо добавления значений в string , вы могли бы использовать метод StringBuilder or string.Join :

 Message = "edit:"   string.Join(" ", PropList.Select(current => current.Key   "="   current.Value));
  

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

1. Вы могли бы рассмотреть возможность предшествования Message с "edit:" только в том случае, если PropList что-либо содержит, т. Е. если PropList это пустое, то и Message .

Ответ №2:

Другим способом сделать это с использованием LINQ было бы запустить Aggregate на PropList (учитывая, что это тип коллекции, совместимый с LINQ):

 string message = PropList.Count > 0
  ? PropList.Aggregate("edit:", (agg, current) => agg   current.Key   "="   current.Value)
  : null;
  

Когда речь идет об использовании производительности / памяти, также было бы неплохо использовать StringBuilder для уменьшения количества выделений памяти, но я думаю, что здесь это не обязательная мысль.

Просто для полноты картины вы также можете сделать это с помощью StringBuilder , лично мне нравится лаконичность:

 string message = PropList.Count > 0
  ? PropList.Aggregate(new StringBuilder("edit:"), 
      (builder, current) => builder.Append(current.Key).Append("=").Append(current.Value)).ToString()
  : null;
  

Ответ №3:

 var Proplist = new Dictionary<int, string>();

Proplist.Add(1, "test1");
Proplist.Add(2, "test2");

var first = Proplist.First();
int key = first.Key;

string Message = null;
foreach (var current in Proplist)
{
    if (first.Key == current.Key)
    {
        //do only one
    }
    else
    {
        Message = "edit:"   current.Key   "="   current.Value;
    }
}
  

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

1. Не могли бы вы добавить некоторую дополнительную информацию о вашем ответе? Это может помочь другим в будущем