扩展方法不起作用?

发布于 2024-10-04 13:31:20 字数 286 浏览 6 评论 0原文

我正在尝试使用

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

As 扩展方法,但它不起作用,我收到错误消息“没有重载方法 TryGetRequestValue”等...

但是,当我取出 HttpRequest arg 并将其更改为字符串时,它可以工作。 ……这是为什么?

非常感谢任何帮助。

I'm trying to use

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

As an extension method and it isn't working I get the error message 'No overload for method TryGetRequestValue' etc etc...

However when I take out the HttpRequest arg and change it to a string it works....Why is this?

Any help much appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

淡淡の花香 2024-10-11 13:31:20

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

但是当我拿出
HttpRequest arg 并将其更改为
字符串它有效......这是为什么?

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

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

该方法返回一个字符串,并且仅采用一个参数:maxLengthArg

如果您已经知道这么多,我深表歉意 - 发布引发异常的代码以及异常本身,将使这一点更清楚。

See my comment under the question, but based on this statement:

However when I take out the
HttpRequest arg and change it to a
string it works....Why is this?

The first parameter in an extension method - the one prefixed with this - determines the type being extended. So the expected way to call this method would be:

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

The method returns a string, and only takes one parameter: maxLengthArg.

Apologies if you already know this much - posting the code that's throwing the exception, as well as the exception itself, will make that clearer.

祁梦 2024-10-11 13:31:20

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

Because the Params collection of the HttpRequest object is a collection of the type NameValueCollection you can not directly check for the existence of some key. But this class has the AllKeys property that return an array of keys the you can use Linq to check the key existence and get the value by means of the Get() Method:

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

Then you can invoke the method as follows:

Request.TryGetRequestValue("someGetParam");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文