首页 > 解决方案 > 重写多个 if 语句

问题描述

我正在寻找编写多个 if 语句并使代码更可重用的最佳实践。这些是我想要更改的 if 语句

    public DataSet getOrganizationDataSet(string organizationType, string 
    name, string state, string city, string county, string zip)
    {
        string search = "";

        if (organizationType != "")
        {
            search = search + "&type=" + organizationType;
        }
        if (name != "")
        {
            search += "&name=" + name;
        }
        if (city != "")
        {
            search = search + "&town=" + city;
        }
        if (zip != "")
        {
            search = search + "&zip=" + zip;
        }
        if (county != "")
        {
            search = search + "&county=" + county;
        }
        if (state != "")
        {
            search = search + "&state=" + state;
        }
}

我正在考虑编写这样的代码以使其更具可读性:

 public DataSet getOrgDataSet(string type, string name, string state, 
 string city, string county, string zip)
    {
        string search = "";

        if ((type ?? state ?? name ?? city ?? county ?? zip) != "") {

            search += "&type=" + type;
            search += "&name=" + name;
            search += "&town=" + city;
            search += "&county=" + county;
            search += "&zip=" + zip;
            search +=  "&state=" + state;

     }

我想知道您对此和最佳实践的看法。在此先感谢,对于新手问题很抱歉,我还在学习 C#

标签: c#if-statement

解决方案


辅助方法是代码重用最基本的方法之一。制作一个有条件地附加到您的查询的辅助方法,如下所示:

private static void AppendSearch(StringBuilder search, string name, string value) {
    if (!string.IsNullOrEmpty(value)) {
        search.Append($"&{name}={value}");
    }
}

现在您可以为每个单独的项目重复调用此方法来构造您的搜索字符串:

var search = new StringBuilder();
AppendSearch(search, "name", name);
AppendSearch(search, "town", town);
AppendSearch(search, "zip", zip);
...
var searchString = search.ToString();

注意:该实现使用 C# 6 语法进行字符串插值。AppendFormat如果您使用的是早期版本的语言,请使用方法:

search.AppendFormat("&{0}={1}", name, value);

推荐阅读