C# 重写长if语句以更加一致

C# 重写长if语句以更加一致,c#,asp.net,C#,Asp.net,写这么长的if语句更好吗?唯一改变的是条件中的d=… <% if ( Request.Url.ToString().Contains("d=36423") || Request.Url.ToString().Contains("d=39252") || Request.Url.ToString().Contains("d=39280") || Request.Url.ToString().Contains("d=39251") || Request.Url.ToString().Conta

写这么长的if语句更好吗?唯一改变的是条件中的
d=…

<%
if (
Request.Url.ToString().Contains("d=36423")
|| Request.Url.ToString().Contains("d=39252")
|| Request.Url.ToString().Contains("d=39280")
|| Request.Url.ToString().Contains("d=39251")
|| Request.Url.ToString().Contains("d=39246")
|| Request.Url.ToString().Contains("d=39245")
|| Request.Url.ToString().Contains("d=39244")
|| Request.Url.ToString().Contains("d=39243")
|| Request.Url.ToString().Contains("d=39242")
|| Request.Url.ToString().Contains("d=39241")
|| Request.Url.ToString().Contains("d=39240")
|| Request.Url.ToString().Contains("d=26009")
|| Request.Url.ToString().Contains("d=39239")
|| Request.Url.ToString().Contains("d=39238")
|| Request.Url.ToString().Contains("d=39237")
|| Request.Url.ToString().Contains("d=38816")
)
{%>

<div class="page-desktop-nav">

  <%} else {%>
  <div class="mobile-nav">
<%}%>


您应该使用
Request.QueryString[“d”]
查找
d
参数的值,然后检查它是否包含在数组或集合中。

您可以将所有十进制值存储在一个数组中,并在for循环中写入d=arr[i]

它将删除您多次编写的同一行代码


谢谢。

您可以将值存储在一个数组中,并使用如下方法:

<%  
var arr = new string[]
  {
    "36423",
    "39252",
    "39280",
    "39251",
    "39246",
    "39245",
    "39244",
    "39243",
    "39242",
    "39241",
    "39240",
    "26009",
    "39239",
    "39238",
    "39237",
    "38816"
  };

  string url = Request.Url.ToString();
  if (arr.Any(s => url.Contains(string.Format("d={0}", s)))) {
%>
url.Contains(string.Format(“d={0}”,s))){
%>

可能会将这些扩展方法添加到您的库中:

static public class ExtensionMethods
{
    static public bool ContainsAny(this string input, IEnumerable<string> searchFor) 
    {
        return searchFor.Any( s => input.Contains(s) );
    }
    static public bool ContainsAny(this string input, params string[] searchFor) 
    {
        return searchFor.Any( s => input.Contains(s) );
    }
}


哈希集比数组更好。
Contains()
将是一个O(1)而不是O(n)。我在以下方面收到错误:编译器错误消息:CS1061:“System.array”不包含“Any”的定义,并且找不到接受“System.array”类型的第一个参数的扩展方法“Any”(您是否缺少using指令或程序集引用?
Any()
System.Linq
命名空间的扩展方法,您应该添加该命名空间才能工作。我可以这样做吗
var arr=new string[]{“36423”、“39252”、“39280”、“39251”、“39246”、“39245”、“39244”、“39243”,“39242”、“39241”、“39240”、“26009”、“39239”、“39238”、“39237”、“38816”};
    if (request.Url.ToString().ContainsAny("d=36423","d=39252","d=39280,"etc."))
    {
    }
    var lookup = new[] {"d=36423","d=39252","d=39280","etc"};
    if (request.Url.ToString().ContainsAny(lookup))
    {
    }