2014-01-29 3 views
5

Wie alle Werte von NameValueCollection als einzelne Zeichenfolge einzugeben,
Jetzt habe ich folgende Methode verwende es zu bekommen:Wie alle Werte als eine einzelne Zeichenfolge von NameValueCollection abgerufen werden?

public static string GetAllReasons(NameValueCollection valueCollection) 
{ 
    string _allValues = string.Empty; 

    foreach (var key in valueCollection.AllKeys) 
     _allValues += valueCollection.GetValues(key)[0] + System.Environment.NewLine; 

    return _allValues.TrimEnd(System.Environment.NewLine.ToCharArray()); 
} 

Jede einfache Lösung mit Linq?

Antwort

8

Sie könnten nutzen die folgende:

string allValues = string.Join(System.Environment.NewLine, valueCollection.AllKeys.Select(key => valueCollection[key])); 
1

Es würde davon abhängen, wie man wollte jeden Wert in Ihrem letzten Zeichenfolge trennen, aber ich verwende eine einfache Erweiterung Methode jeden IEnumerable<string> auf einen Wert getrennte Zeichenfolge zu kombinieren:

public static string ToValueSeparatedString(this IEnumerable<string> source, string separator) 
{ 
    if (source == null || source.Count() == 0) 
    { 
     return string.Empty; 
    } 

    return source 
     .DefaultIfEmpty() 
     .Aggregate((workingLine, next) => string.Concat(workingLine, separator, next)); 
} 

Als Beispiel dafür, wie diese zu verwenden, um mit einem NameValueCollection:

NameValueCollection collection = new NameValueCollection(); 
collection.Add("test", "1"); 
collection.Add("test", "2"); 
collection.Add("test", "3"); 

// Produces a comma-separated string of "1,2,3" but you could use any 
// separator you required 
var result = collection.GetValues("test").ToValueSeparatedString(",");