2010-11-26 194 views
1

我试图使用扩展方法不起作用?

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

作为扩展方法,它不工作我得到错误信息“不超载的方法TryGetRequestValue”等等...

然而,当我走出HttpRequest参数并将其更改为一个字符串它的作品....这是为什么?

任何帮助非常感谢。

+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检查钥匙存在和借)获取的手段(方法获得的价值:

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");