Je souhaite convertir un NameValueCollection à un KeyValuePair. Existe-t-il un moyen de le faire facilement pour une seule valeur dans un NameValueCollection?

J'ai ceci en ce moment mais cela semble assez verbeux:

private KeyValuePair<string, string> GetEtagHeader(NameValueCollection collection)
{
    var etagValue = collection.Get(HttpRequestHeader.IfMatch.ToString());

    return new KeyValuePair<string, string>(HttpRequestHeader.IfMatch.ToString(), etagValue);
}
0
R Doolabh 21 nov. 2018 à 01:08

3 réponses

Meilleure réponse

Je ne sais pas combien de temps vous pouvez l'obtenir.

Une possibilité est de placer le Get là où vous créez le KeyValuePair

private static KeyValuePair<string, string> GetEtagHeader(NameValueCollection collection)
{
    string key = HttpRequestHeader.IfMatch.ToString();
    return new KeyValuePair(key, collection.Get(key));
}

Cela devrait servir votre cas. J'irais plus loin et je le diviserais en 2 méthodes - une pour votre cas spécifique et une aide générique.

private static KeyValuePair<string, string> GetEtagHeader(NameValueCollection collection)
{
    return ToKeyValuePair(HttpRequestHeader.IfMatch.ToString(), collection);
}

private static KeyValuePair<string, string> ToKeyValuePair(string key, NameValueCollection collection)
{
    return new KeyValuePair(key, collection.Get(key));
}
0
pamcevoy 29 nov. 2018 à 01:08

Ce serait moins verbeux si vous mettez HttpRequestHeader.IfMatch.ToString() dans une variable temporaire et à la place en ligne le temp etagValue:

private KeyValuePair<string, string> GetEtagHeader(NameValueCollection collection)
{
    string key = HttpRequestHeader.IfMatch.ToString();
    return new KeyValuePair<string, string>(key, collection.Get(key));
}
0
Olivier Jacot-Descombes 20 nov. 2018 à 22:27

Si c'était moi, je définirais une méthode d'extension comme celle-ci:

public static class ExtensionMethods
{
    static public KeyValuePair<string,string> GetPair(this NameValueCollection source, string key)
    {
        return new KeyValuePair<string, string>
        (
            key,
            source.Get(key)
        );
    }
}

Ensuite, vous pouvez simplement écrire votre code original comme ceci:

private KeyValuePair<string, string> GetEtagHeader(NameValueCollection collection)
{
    return collection.GetPair(HttpRequestHeader.IfMatch.ToString());
}
0
John Wu 21 nov. 2018 à 00:25