Метод расширения не работает? - PullRequest
1 голос
/ 26 ноября 2010

Я пытаюсь использовать

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 ноября 2010

Смотрите мой комментарий под вопросом, но основываясь на этом утверждении:

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

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

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

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

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

0 голосов
/ 26 ноября 2010

Поскольку коллекция 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");
...