2010-11-26 6 views
1

Я пытаюсь использоватьМетод расширения не работает?

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

В качестве метода расширения и она не работает, я получаю сообщение об ошибке «Нет перегрузки для метода TryGetRequestValue» и т.д. и т.п ...

Однако, когда я беру из HttpRequest arg и изменить его на строку, в которой он работает ... Почему это?

Любая помощь очень ценится.

+7

Ключ в том, как вы ** используете ** его. Отправьте код, по которому вы * вызываете * метод, и остальную часть сообщения об ошибке. Это будет намного легче понять, что происходит не так! :) – 2010-11-26 16:54:31

ответ

2

Смотрите мой комментарий под вопросом, но на основе этого заявления:

Однако, когда я вывезти HttpRequest Arg и изменить его к строки она работает .... Почему это?

Первый параметр в методе расширения - тот, который префикс this - определяет расширяемый тип. Таким образом, ожидаемый способ вызвать этот метод будет:

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

Метод возвращает string, и принимает только один параметр: maxLengthArg.

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

0

Поскольку Params коллекция объекта HttpRequest представляет собой коллекцию типа NameValueCollection вы не можете напрямую проверить наличие некоторого ключа. Но этот класс имеет AllKeys свойства, возвращающий массив ключей можно использовать Linq для проверки ключа существования и получить значение с помощью Get() Метода:

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

Тогда вы можете вызвать метод следующим образом:

Request.TryGetRequestValue("someGetParam"); 
Смежные вопросы