【问题标题】:Square bracket syntax in function's parameter in C#?C#中函数参数中的方括号语法?
【发布时间】:2013-03-29 04:56:00
【问题描述】:

我正在学习 ASP.NET,偶然发现了这个方法声明:

public IQueryable<Product> GetProducts([QueryString("id")] int? categoryId) {.....}

教程说categoryId 将等于查询字符串“id”(来自 URL,如 &id=5),但问题是 [QueryString("id")] 的语法叫什么?这在 ASP.NET 之外可用吗?它的应用程序是什么?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这是将QueryStringAttribute 属性应用于参数categoryId。它只是一个属性,就像您可能更习惯在方法或类上看到的属性一样,如下所示:

    [STAThread]
    static void Main()
    {
    }
    

    在这种情况下,大概框架的某些部分(我不是 ASP.NET 开发人员,所以我不能指出确切是什么)正在使用反射来查找所有方法,找到应用于参数的任何QueryStringAttribute 值,然后将这些属性中的名称与查询字符串中的名称进行匹配,然后提取匹配值以传递给方法调用(再次使用反射)。

    【讨论】:

    • “属性”是指这个:msdn.microsoft.com/en-us/library/z0w1kczw(v=vs.80).aspx 属性是用来描述数据的吗? AFAIK 属性只是一个元数据,如何将其转化为实际值并应用于 categoryId?
    • @Sargon:它是元数据,是的 - 它应用于参数本身......并且 ASP.NET 能够使用该元数据来计算如何自动调用 GetProducts。将编辑答案以提及这一点。
    • 感谢您对反射的回答。对于任何有兴趣编写自己的属性和反射技术的人,这里是我刚刚阅读的页面:msdn.microsoft.com/en-us/library/z919e8tw(v=vs.80).aspx
    猜你喜欢
    • 2016-10-08
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 2023-03-28
    • 2020-09-11
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多