2016-06-19 25 views
-1

So habe ich zwei, wenn stament Wörterbuch Wert zu behandeln.Wenn die Methode ist POST Ich muss nur die status Params zum Wörterbuch hinzufügen.Alle anderen Parameter sind die gleichen.Vermeiden Sie doppelten Code in SortedDictionary C#

var stringBuilder = new StringBuilder();      
var dictionary = new SortedDictionary<string, string>(); 
if (method == "GET") 
{ 
    stringBuilder.Append("GET&"); 
    stringBuilder.Append(Uri.EscapeDataString(url)); 
    stringBuilder.Append("&"); 
    dictionary = new SortedDictionary<string, string> 
    { 
     { "oauth_version" , oauthVersion }, 
     { "oauth_consumer_key", consumerKey }, 
     { "oauth_nonce" , oauthNonce }, 
     { "oauth_signature_method" , oauthSignatureMethod }, 
     { "oauth_timestamp" , oauthTimeStamp }, 
     { "oauth_token" , accessToken }, 
    }; 
} 

if (method == "POST") 
{ 
    stringBuilder.AppendFormat("POST&{0}&", Uri.EscapeDataString(url)); 
    dictionary = new SortedDictionary<string, string> 
    { 
     { "oauth_version" , oauthVersion }, 
     { "oauth_consumer_key", consumerKey }, 
     { "oauth_nonce" , oauthNonce }, 
     { "oauth_signature_method" , oauthSignatureMethod }, 
     { "oauth_timestamp" , oauthTimeStamp }, 
     { "oauth_token" , accessToken }, 
     { "status" , status } 
    }; 
} 

Gibt es sowieso Duplikat in meinem code.Any Vorschlag praktisch wäre zu vermeiden.

Mit freundlichen Grüßen.

+0

Was meinen Sie mit _ "duplicate" _? Soweit es die Schlüssel eines Wörterbuchs gibt, kann es keine Duplikate geben. Ich finde deine Frage schwer zu verstehen, was willst du nicht, um ein Duplikat von zu sein? –

+0

@VisualVincent was ich meine ist, wenn die Methode ist POST Ich muss nur den Status params.All die Parameter in Get und Methode sind die gleichen. –

Antwort

3

Ich sehe nicht viel Beziehung zwischen Ihrer StringBuilder Instanzvariable und dem Wörterbuch, das Sie konstruieren, also unter der Annahme der Verdoppelung des Wörterbuchcodes, kann es aus diesen if Bedingungen herausgenommen werden, und dann könnten Sie mit dem umgehen Rest StringBuilder Beispiel wie folgt aus:

var stringBuilder = new StringBuilder(); 
stringBuilder.AppendFormat("{0}&{1}&", method, Uri.EscapeDataString(url)); 

var dictionary = new SortedDictionary<string, string> 
{ 
    { "oauth_version", oauthVersion }, 
    { "oauth_consumer_key", consumerKey }, 
    { "oauth_nonce", oauthNonce }, 
    { "oauth_signature_method", oauthSignatureMethod }, 
    { "oauth_timestamp", oauthTimeStamp }, 
    { "oauth_token", accessToken }, 
}; 

if (method == "POST") 
{ 
    // Only add the status parameter if the method is POST 
    dictionary["status"] = status; 
} 

Also im Grunde nach dieser Code ausgeführt, sowohl die stringBuilder und dictionary Instanzvariablen wie in Ihrer Frage gezeigt werden die erwarteten Werte.

Dies bedeutet, dass Ihr Wörterbuch aussieht, als ob es Abfragezeichenfolgenparameterwerte enthält. Wenn dies der Fall ist, werden Sie definitiv diese URLs richtig codieren wollen, bevor Sie überhaupt über das HTTP-Protokoll senden:

+0

Hi Darin.Was ich meinte, ist die Post Methode füge einfach dieses {"status", status} in Dictionary.Get Methode nicht {"status", status} –

+0

OK, ich habe meine Antwort mit einem Beispiel aktualisiert wie das erreicht werden kann. Sie können dem Wörterbuch nur den Parameter "status" hinzufügen, wenn der Wert der Methode POST lautet. –

+0

Hallo Darin, danke für Hilfe. Warum hätte ich nicht darüber nachdenken sollen –