【问题标题】:C# simple way to build params list for variable number of paramsC# 为可变数量的参数构建参数列表的简单方法
【发布时间】:2016-11-16 20:28:28
【问题描述】:

我有一个采用这个参数的方法

params string[] additionalParameters 

我是这样构建的:

qsParams = new string[] {"k=" + k, "l=" + l, "o=" + o, "s=" + s, "t=" + t, "h=" + h, "exp=" + exp };

这些是 url 参数。问题是我只想添加变量不为空或不为空的参数。

我可以做这种事情:

if (string.IsNullOrEmpty(k))
{
    qsParams = new string[] {"l=" + l, "o=" + o, "s=" + s, "t=" + t, "h=" + h, "exp=" + exp };
}

但是尝试处理空变量的所有不同排列会变得复杂而丑陋。

如果没有空值,任何人都可以建议一种简单的方法来添加参数吗?也许我可以转换为参数 [] 字符串的列表?

【问题讨论】:

  • 在构建后是否所有这些参数都进入一个字符串?
  • 它们会一直按顺序排列吗,IE 会不会一直是 K、L、O 等...如果是这样,你不能只使用 for 循环(对于 string[] 中的每个元素) 并有第二个列表,例如:“k="...ect
  • 顺序不重要。 @mybirthname 的回答完成了这项工作。

标签: c# variables keyword params


【解决方案1】:
    public static void Main(string[] args)
    {

        List<string> parameters = new List<string>();

        string k = "a";
        string l = null;

        AddParam("k", k, parameters);
        AddParam("l", l, parameters);


        string[] result = parameters.ToArray();
    }

    public static void AddParam(string paramName, string paramValue, List<string> parameters)
    {
        if (string.IsNullOrEmpty(paramValue))
            return;

        parameters.Add(paramName + "=" + paramValue);
    }

你可以试试这样的。

【讨论】:

  • 太好了,谢谢,正是我需要的!一个小修复虽然if (string.IsNullOrEmpty(paramValue)) return;
  • @NorbertNorbertson 是的,我已修复,如果对您有帮助,请将答案标记为正确 :)
【解决方案2】:

如果你的变量没有值,你可以编写一个返回null的方法:

private string GetListValue(string prefix, string value) {
    if (String.IsNullOrEmpty(value)) {
        return null;
    }
    else {
        return prefix + value;
    }
}

您可以使用此方法定义您的原始列表(仅使用 2 个值):

string[] rawList = { GetListValue("k=", k), GetListValue("l=", l) };

然后用 LINQ 清理列表:

string[] cleanValues = rawValues.Where(v => v != null).ToArray();

【讨论】:

    【解决方案3】:

    如果您的参数总是按正确的顺序排列:

    List<string> qsParams = new List<string>();
    string[] paramNames = new string[] { "k", "l", "o", "s", "t", "h", "exp" };
    for (int i = 0; i < additionalParameters.Length; i++)
    {
        if (!string.IsNullOrEmpty(additionalParameters[i]))
        {
            qsParams.Add(string.Format("{0}={1}", paramNames[i], additionalParameters[i]));
        }
    }
    

    【讨论】:

      【解决方案4】:

      只需创建一个字典,键是参数,值很好......值。

      Dictionary<string, string> Parameters = new Dictionary<string, string>();
      
      Parameters.Add("k", "myKValue");
      Parameters.Add("o", "myOValue");
      
      string paramaterList = string.Join("&", Parameters.Select(x => $"{x.Key}={x.Value}"));
      

      仅当值不为空时才向字典添加值。

      【讨论】:

        猜你喜欢
        • 2015-06-08
        • 2023-04-09
        • 1970-01-01
        • 2018-06-28
        • 2012-12-09
        • 2017-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多