Могу ли я объединить этот код о функциях расширения IFormCollection, IQueryCollection - PullRequest
1 голос
/ 20 июня 2019

Мне интересно об этом коде. Как я могу слить в один метод?

Оба метода дают одинаковый результат. Но параметры разные. Как я могу слить в этом случае?

Я попытался объединить этот код. но я потерпел неудачу. о IFormCollection, IQueryCollection

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 Ответ

2 голосов
/ 20 июня 2019

Ты почти там. И IFormCollection, и IQueryCollection реализуют 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...