String.Format与SelectMany

时间:2012-07-30 12:37:41

标签: c# string linq lambda

我想在.SelectMany()的帮助下在一行中设置一个String。 我有Object,其中包含Dictionary<String,FileInfo>。对于这些字典中的每个元素,我希望将Key放入String.Format(),但我总是将"System.Linq.Enumerable+<SelectManyIterator>d__142[System.String,System.Char]"作为returnvalue。

我的错在哪里?

String.Format(
    "All Strings : {0} on {1} ", 
    MyObject.MyDictionary.Keys.SelectMany(x => x), 
    MyObject.Type);

3 个答案:

答案 0 :(得分:2)

框架3.5

 String.Format(
        "All Strings : {0} on {1} ", 
        string.Join(string.Empty, MyObject.MyDictionary.Keys.SelectMany(x => x).ToArray()),  
        MyObject.Type);

框架4

 String.Format(
        "All Strings : {0} on {1} ", 
        string.Join(string.Empty, MyObject.MyDictionary.Keys.SelectMany(x => x)),  
        MyObject.Type);

答案 1 :(得分:2)

SelectMany将返回一个IEnumerable,这就是为什么,你需要将键变成一个字符串,如下所示:

String.Format("All Strings : {0} on {1}",
     String.Join(", ", MyObject.MyDictionary.Select(x => x.Key)),
     MyObject.Type);

答案 2 :(得分:0)

非常感谢所有人,我现在用这种方式解决了它:

String.Format("All Strings : {0} on {1} ", String.Join("; ",MyObject.MyDictionary.Keys), MyObject.Type);