【问题标题】:Most elegant way of checking the value of a query string parameter if not null?如果不为空,检查查询字符串参数值的最优雅方法是什么?
【发布时间】:2012-06-29 10:51:56
【问题描述】:
if(Page.Request.QueryString["ParamName"] != null)
  if(Page.Request.QueryString["ParamName"] == expectedResult)
    //Do something spectacular

上面的内容看起来很笨拙。是否有更优雅/紧凑的方法来检查查询字符串参数是否不为空,如果是 - 检索它的值?

【问题讨论】:

标签: c# asp.net if-statement query-string


【解决方案1】:

我首先想到了提供

if ((Page.Request.QueryString["ParamName"] ?? "") == expectedResult) {

但很快意识到,对于字符串,将某些字符串与 null 进行比较是可以的,并且会产生 false,所以真的只使用它就可以了:

if(Page.Request.QueryString["ParamName"] == expectedResult)
    //Do something spectacular

【讨论】:

    【解决方案2】:

    您可以使用String.IsNullOrEmpty

    String.IsNullOrEmpty(Page.Request.QueryString["ParamName"]);
    

    或者

    var parm = Page.Request.QueryString["ParamName"] ?? "";
    if(parm == expectedResult)
    {
    
    }
    

    【讨论】:

    • ParamName 的值呢?您只处理了我的代码的第一行(尽管如此,我确实应该使用 IsNullOrEmpty - 所以 +1)。
    【解决方案3】:

    我个人会使用一组简单的扩展方法,如下所示:

    public static class RequestExtensions
    {
        public static string QueryStringValue(this HttpRequest request, string parameter)
        {
            return !string.IsNullOrEmpty(request.QueryString[parameter]) ? request.QueryString[parameter] : string.Empty;
        }
    
        public static bool QueryStringValueMatchesExpected(this HttpRequest request, string parameter, string expected)
        {
            return !string.IsNullOrEmpty(request.QueryString[parameter]) && request.QueryString[parameter].Equals(expected, StringComparison.OrdinalIgnoreCase);
        }
    }
    

    和一个示例用法

    string value = Page.Request.QueryStringValue("SomeParam");
    bool match = Page.Request.QueryStringValueMatchesExpected("SomeParam", "somevaue");
    

    【讨论】:

    • 最好编写可以完全、快速和容易理解的代码,其他开发人员可能会来继续你的代码。此外,如果您通过编写的行看到有多少代码是产品,您就会意识到您编写的代码很慢。一个简单的== 就完成了。
    • 乐于接受批评,但您能解释一下代码是如何被认为“慢”的吗?
    • 因为我也接受批评,所以我收回了慢代码,我检查它并编译创建我所看到的,而不是我最初认为的额外转换。 (我的意思是有很多额外的检查,当只需要== 但它是我们所看到的)
    • 我必须告诉你需要更多代码,因为 '==' 在这种情况下不起作用...-> site.com?ParamName=One&ParamName=Dyo&ParamName=OneMore 请注意,我已经多次放置 ParamName
    • 这绝对是一个不错且可重复使用的提案。
    猜你喜欢
    • 1970-01-01
    • 2010-09-26
    • 2013-09-11
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多