2016-06-19 5 views
-1

Так что у меня есть два, если stament для обработки словарного значения. Если метод POST, мне просто нужно добавить параметры status в словарь. Все остальные параметры одинаковы.Избегайте дублирования кода в 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 } 
    }; 
} 

Есть ли пути, чтобы избежать дублирования в моем коде. Любое предложение было бы удобно.

Просьба рассмотреть.

+0

Что вы подразумеваете под _ "duplicate" _? Что касается ключей словаря, то не может быть дубликатов. Я нахожу, что ваш вопрос трудно понять, что вам не нужно, чтобы дублировать? –

+0

@VisualVincent, что я имею в виду, если метод POST Мне просто нужно добавить параметры состояния. Все параметры в get и method одинаковы. –

ответ

3

Я не вижу никакого отношения между вашей переменной StringBuilder и словарем, который вы строите, поэтому, предполагая дублирование словарного кода, его можно удалить из условий if, а затем вы можете иметь дело с оставшиеся StringBuilder экземпляр так:

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; 
} 

так в основном после выполнения этого кода обе переменные экземпляра stringBuilder и dictionary, как показано на ваш вопрос будет иметь ожидаемые значения.

Говорят, что ваш словарь выглядит так, как будто он содержит значения параметров строки запроса. Если это так, то вам более чем определенно захочется правильно кодировать эти значения, прежде чем когда-либо подумать о передаче их по протоколу HTTP:

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

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

Привет, Darin.Что я имел в виду, это метод post, просто добавьте этот {"status", status} в словарь. Метод GET не имеет {"status", status} –

+0

OK, я обновил свой ответ на примере как это может быть достигнуто. Вы можете просто добавить параметр «status» в словарь, если значение метода POST. –

+0

Привет, Дарин, спасибо за помощь. Почему бы мне не подумать об этом –

Смежные вопросы