2009-03-03 9 views
6

Ich habe folgenden Code geschrieben und es funktioniert auch - aber ich wollte wissen, ob sie besser als diesen Weg ist:Wie wird NameValueCollection mit einem Schlüssel in C# sortiert?

NameValueCollection optionInfoList = ..... ; 
if (aSorting) 
      { 
       optionInfoListSorted = new nameValueCollection();   
       String[] sortedKeys = optionInfoList.AllKeys; 
       Array.Sort(sortedKeys); 
       foreach (String key in sortedKeys) 
        optionInfoListSorted.Add(key, optionInfoList[key]); 

       return optionInfoListSorted; 
      } 

Antwort

3

Vielleicht könnten Sie eine andere Art von Liste verwenden, die direkt Sortierung unterstützt?

List<KeyValuePair<string, string>> optionInfoList = ...; 
if (sorting) { 
    optionInfoList.Sort((x,y) => String.Compare(x.Key, y.Key)); 
} 
return optionInfoList; 
+0

Ich muss dies an eine andere Klasse übergeben und List in meiner Methode Signaturen gibt mir Code-Analyse Fehler. –

+0

Würden Sie mit "Code Analysis Errors" konkret meinen, was Sie meinen? – Sung

4

Verwenden Sie stattdessen eine SortedDictionary.

+0

+1; oder SortedList <,>, je nach Szenario. –

+5

SortedList und SortedDictionary erlauben keine doppelten Schlüssel, wodurch einige gezwungen werden, NameValueCollection zu verwenden. –

+1

Wenn eine 'NameValueCollection' verwendet wird und wie im Beispiel mit doppelten Schlüsseln sortiert wird, ist die Reihenfolge für doppelte Schlüssel unbestimmt, so dass die Liste wirklich nicht sortiert ist, oder? –

1

Wenn Sie haben zu verwenden NameValueCollection und Sie haben nicht viele Elemente in der Sammlung, dann ist es in Ordnung. Keine Notwendigkeit, irgendeinen Liebhaber zu bekommen, wenn es erledigt ist.

Wenn es sich um einen Leistungsengpass handelt, besuchen Sie es erneut.

Verwandte Themen