在循环的第一次迭代中添加值

时间:2014-07-06 12:01:59

标签: c# asp.net

我使用以下代码,我需要连接键和值,但编辑属性应该只是在开始时添加到字符串(只是在第一次),我该怎么做?我试图找到当前和列表的索引但没有成功......任何想法?

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

3 个答案:

答案 0 :(得分:4)

将键值对列表写入循环中的Message,然后在最后将"edit:"预先挂起,如下所示:

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

请注意, 这是一种有效的方式:不是将值附加到string,而是可以使用StringBuilderstring.Join方法:< / p>

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

答案 1 :(得分:1)

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;
    }
}

答案 2 :(得分:1)

使用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;