扩展方法不起作用?

时间:2010-11-26 16:52:16

标签: c# c#-4.0 extension-methods

我正在尝试使用

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

作为扩展方法,它无法正常工作,我收到错误消息'方法TryGetRequestValue没有重载'等等......

然而,当我取出HttpRequest arg并将其更改为字符串时,它可以工作....为什么会这样?

任何帮助都非常感激。

2 个答案:

答案 0 :(得分:2)

请参阅我在该问题下的评论,但基于此声明:

  

然而,当我拿出来的时候   HttpRequest arg并将其更改为   它的作品是什么......为什么会这样?

扩展方法中的第一个参数 - 前缀为this的参数 - 确定要扩展的类型。所以调用这个方法的预期方法是:

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

该方法返回string,只接受一个参数:maxLengthArg

道歉,如果你已经知道这么多 - 发布抛出异常的代码,以及异常本身,将会更清楚。

答案 1 :(得分:0)

因为 HttpRequest 对象的 Params 集合是 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");