我可以合并有关IFormCollection和IQueryCollection扩展功能的代码

时间:2019-06-20 06:19:00

标签: c# reflection

我想知道这段代码。 如何合并为一种方法?

两个方法都给出相同的结果。 但是参数是不同的。 在这种情况下如何合并?

我尝试合并此代码。但我失败了 关于IFormCollectionIQueryCollection

public static class extFunc
{
    public static string SerializeObject(this IFormCollection model)
    {
        if (model.Count == 0)
            return string.Empty;

        var dic = new Dictionary<string, string>();
        foreach (var key in model.Keys)
            dic.Add(key, model[key]);

        return JsonConvert.SerializeObject(dic);
    }

    public static string SerializeObject(this IQueryCollection model)
    {
        if (model.Count == 0)
            return string.Empty;

        var dic = new Dictionary<string, string>();
        foreach (var key in model.Keys)
            dic.Add(key, model[key]);

        return JsonConvert.SerializeObject(dic);
    }

}

我希望像这样的代码。 但是这段代码失败了

public string SerializeObject<T>(T model) where T : ICollection<KeyValuePair<string, StringValues>>
{
    if (model.Count == 0)
        return string.Empty;

    var dic = new Dictionary<string, string>();
    foreach (var key in model.Keys)
        dic.Add(key, model[key]);

    return JsonConvert.SerializeObject(dic);
}

1 个答案:

答案 0 :(得分:2)

您快到了。 IFormCollectionIQueryCollection都实现IEnumerable<KeyValuePair<string, StringValues>>,如您的示例所示:

public static string SerializeObject(this IEnumerable<KeyValuePair<string, StringValues>> model)
{
    if (!model.Any())
        return string.Empty;

    var dic = new Dictionary<string, string>();
    foreach (var kv in model)
        dic.Add(kv.Key, kv.Value);

    return JsonConvert.SerializeObject(dic);
}