2010-11-26 28 views
1

Je suis en train d'utiliserLa méthode d'extension ne fonctionne pas?

public static string TryGetRequestValue(this HttpRequest stringArg, int maxLengthArg) 
{ 
    return null; 
} 

En tant que méthode d'extension et il est pas que je travaille le message d'erreur « Pas de surcharge pour la méthode TryGetRequestValue » etc etc ...

Cependant quand je prends sur l'argument HttpRequest et le changer en une chaîne cela fonctionne .... Pourquoi est-ce?

Toute aide très appréciée.

+7

La clé réside dans la façon dont ** vous l'utilisez. Veuillez publier le code par lequel vous * appelez * la méthode, ainsi que le reste du message d'erreur. Cela va rendre beaucoup plus facile de comprendre ce qui ne va pas! :) –

+0

Pourriez-vous montrer comment essayez-vous d'appeler cette méthode d'extension? –

+0

Aussi ce qui est la signature d'une classe de votre méthode –

Répondre

2

Voir mon commentaire sous la question, mais fondée sur cette déclaration:

Cependant quand je prends le HttpRequest arg et changer une chaîne ça marche .... Pourquoi est-ce?

Le premier paramètre d'une méthode d'extension - celui préfixé par this - détermine le type à étendre. Ainsi, la manière attendue d'appeler cette méthode serait:

HttpRequest instanceOfClassBeingExtended = new HttpRequest(); 
string returnValue = instanceOfClassBeingExtended.TryGetRequestValue(10000); 

La méthode renvoie un paramètre string, et ne prend un: maxLengthArg. Toutes nos excuses si vous en savez déjà tellement - publier le code qui lève l'exception, ainsi que l'exception elle-même, rendra cela plus clair.

0

Parce que la Params collection de l'objet HttpRequest est une collection de type NameValueCollection vous ne pouvez pas vérifier directement l'existence d'une clé. Mais cette classe a les AllKeys propriété qui renvoient un tableau de clés du vous pouvez utiliser Linq pour vérifier l'existence clé et obtenir la valeur au moyen du Get() Méthode:

public static string TryGetRequestValue(this HttpRequest request, string stringArg) 
{ 
    string result = null; 
    string[] keys = request.Params.AllKeys; 
    if(keys.Contains<string>(stringArg)) 
    { 
     result = request.Params.Get(stringArg); 
    } 
    return result; 
} 

Ensuite, vous pouvez appeler la méthode comme suit:

Request.TryGetRequestValue("someGetParam");