2014-12-02 31 views
1

我在C#中Dictionary<int, string>,我需要一种方法来创建它的内容与格式"key1-value1, key2-value2"一个字符串,等等的toString字典C#

我是新来的C#,所以我创建了以下函数的实现这个目标:

private string buildString(Dictionary<int, string> info) 
{ 
    string result = ""; 
    int i = 1; 
    foreach (KeyValuePair<int, string> pair in info) 
    { 
     if (i < info.Count) 
     { 
      result += pair.Key + "-" + pair.Value + ","; 
     } 
     else 
     { 
      result += pair.Key + "-" + pair.Value; 
     } 
     i++; 
    } 

    return result; 
} 

但是,这个功能是无效的和冗长的。我知道C#有String.format,但我不确定是否以及如何使用它。

是否有更好的方式以更高效和更简洁的方式实现相同的输出?如果是这样如何?

+1

你不应该使用'string'。相反,使用['System.Text.StringBuilder'](http://msdn.microsoft.com/library/en-us/system.text.stringbuilder)。 – ikh 2014-12-02 12:06:44

+0

当你使用foreach循环时,你使用的计数器(i)是不必要的。 foreach循环将查看集合中的所有项目然后停止,因此不需要计数器。 – 2014-12-02 12:07:07

+0

@DavidWatts在这段代码中,'i'不是用来停止的。在'info'的最后一个元素上,他不想追加','字符。 – ikh 2014-12-02 12:08:37

回答

13

string.Format是格式strings,你有价值观,你想连接它们。

您可以使用string.Join这样的:

var result = string.Join(", ", info.Select(kvp => string.Join("-", kvp.Key, kvp.Value))); 
4

这是否满足您的需求?

Dictionary<int, string> dic = new Dictionary<int, string>() 
{ 
    {1, "aaaa"}, 
    {2, "uodhasdhsa"}, 
    {3, "audaygdyasgdyasdgasydgas"} 
}; 

List<string> list = new List<string>(dic.Select(keyValuePair => keyValuePair.Key + "-" + keyValuePair.Value)); 
Console.WriteLine(string.Join(", ", list)); 
+0

好吧,Selman22在......之前发布了解决方案... – Veverke 2014-12-02 12:06:55

+0

..只需30秒! – ikh 2014-12-02 12:07:37

+0

@ikh:确实:-) – Veverke 2014-12-02 12:08:24